TiDB Server 常驻内存与实际堆内存相差较大

系统版本 & kernel 版本

CentOS Linux release 7.6.1810 (Core)

4.20.10-1.el7.elrepo.x86_64

  • TiDB 版本

3.0.5

问题描述

堆内存

常驻内存

内存快照
# runtime.MemStats
# Alloc = 415538248
# TotalAlloc = 3372819550160
# Sys = 9084698712
# Lookups = 0
# Mallocs = 17296601743
# Frees = 17295957110
# HeapAlloc = 415538248
# HeapSys = 8652357632
# HeapIdle = 8137515008
# HeapInuse = 514842624
# HeapReleased = 7840784384
# HeapObjects = 644633
# Stack = 4685824 / 4685824
# MSpan = 4808960 / 79462400
# MCache = 13888 / 16384
# BuckHashSys = 11236929
# GCSys = 322988032
# OtherSys = 13951511
# NextGC = 743794224
# LastGC = 1573115544974009452
# PauseNs = [......]
# PauseEnd = [......]
# NumGC = 10642
# NumForcedGC = 0
# GCCPUFraction = 7.15852832749584e-05
# DebugGC = false
goroutine

goroutine.txt (431.4 KB)

我的疑问

相差这么多是正常的吗?

可以用 go pprof 查看一下内存占用情况

http://A.A.A.A:port/debug/pprof

可以提供一下 goroutine 数量的信息吗

老师你好,文件已经上传,为了看起来舒服,我放在了上面

我按照 tidb-ansible https://github.com/pingcap/tidb-ansible/blob/master/roles/systemd/templates/systemd_binary.service.j2 源代码,将 MemoryLimit 添加到inventory.ini 配置文件中,

......
# process supervision, [systemd, supervise]
process_supervision = systemd

MemoryLimit = 20G

timezone = Asia/Shanghai
......

然后执行

ansible-playbook deploy.yml && ansible-playbook rolling_update.yml
  • 这个不是我们 inventory.ini 中的配置文件,应该是 /etc/systemd/system/tidb-4000.service 中的

老师,那这个文件的主要作用是干什么的呢?

systemd 用于监控 tidb 进程的配置文件