【系统版本 & kernel 版本】
CentOS Linux release 7.6.1810 (Core)
4.20.10-1.el7.elrepo.x86_64
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)
【我的疑问】
相差这么多是正常的吗?
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
systemd 用于监控 tidb 进程的配置文件
好的感谢老师,我现在的做法是
1 根据自己的内存大小 ,设定一个TiDB进程的内存限制,这样做是先保证不让TiDB在突发的情况下导致内存耗尽,让节点机卡死。
2 优化慢 SQL,并根据机器的硬件配置,调整程序控制并发量
总结:
因为我目前TiDB 常驻内存
耗尽的原因,大部分是SQL语法和机器硬件配置低的原因,先保机器不卡死、不宕机吧!
yilong
(yi888long)
10
好的,先安装这个处理一下,有问题再开帖子一起讨论,多谢
我们都是大蛤蟆
(我们都是大蛤蟆)
11
您好,
Tikv 有对应的 限制内存的 hard limit 么?
老师,麻烦问一下, 这个问题在 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/