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 进程的配置文件

好的感谢老师,我现在的做法是

1 根据自己的内存大小 ,设定一个TiDB进程的内存限制,这样做是先保证不让TiDB在突发的情况下导致内存耗尽,让节点机卡死。

2 优化慢 SQL,并根据机器的硬件配置,调整程序控制并发量

总结: 因为我目前TiDB 常驻内存 耗尽的原因,大部分是SQL语法和机器硬件配置低的原因,先保机器不卡死、不宕机吧!

好的,先安装这个处理一下,有问题再开帖子一起讨论,多谢

您好, Tikv 有对应的 限制内存的 hard limit 么?

建议参考下述链接:

https://pingcap.com/docs-cn/stable/reference/performance/tune-tikv/#tikv-性能参数调优

老师,麻烦问一下, 这个问题在 4.0-rc 中要怎么设置?

好的,上述的帖子 TiDB 4.0 RC 限制TiDB 进程的内存使用 已回复:

1、目前版本的 TiUP 中暂时不支持 Memory Limit 的设置,该功能在实现中,敬请期待

2、4.0 版本引入了 oom-use-tmp-storage 参数,特定的 join 语句,使用的内存在超过 mem-quota-query 后,会将临时结果保存在磁盘,减少 oom 情况的发生:

https://pingcap.com/docs-cn/stable/releases/4.0.0-beta/