救急,再次出现TIDB内存持续没有释放

【 TiDB 使用环境`】生产环境
【 TiDB 版本】5.4
【遇到的问题】
内存监控图:

内存分布:


TIDB内存持续没有释放,这个问题我再另外一个帖子提到过TIDB内存持续没有释放,最终卡死宕机 - #12,来自 h5n1
当时改了tidb_analyze_version=1,稳定很多了,以为不会上涨了,但是这只是上涨的很慢,最近几天还是持续上涨没有释放。

本来想在原来帖子继续回复的,感觉那个帖子垫底凉了,只能再发一个帖求助了。
按照这个上涨的速度,我担心过不了这两天,系统就得手动重启释放内存了,不然就要凉凉。谢谢各位大佬

监控导出:
main_tidb-Overview_2022-04-15T12_18_40.319Z.json (966.0 KB)

我在github上貌似找到了类似的issue
https://github.com/pingcap/tidb/issues/32413

1 个赞

上次改了analyze的版本之后,有清除已有的统计信息吗?
可以按照提示清除所有统计信息,重新收集一次
统计信息简介 | PingCAP Docs

2 个赞

这个我已经按照文档清除了,并且重启了tidb

2 个赞

大佬,有没有办法判断出来是什么东西占用了内存呀,这个持续不释放感觉不是个正常现象

1 个赞

先定位一下吧
https://docs.pingcap.com/zh/tidb/stable/identify-expensive-queries

然后手动跟踪一下性能
https://docs.pingcap.com/zh/tidb/stable/dashboard-profiling#查看性能分析状态

2 个赞

看下慢sql

如果不是自动analyze导致的,查下慢sql和expensive sql吧

1 个赞

这个好像一直在执行sql,如果业务上并没有执行的情况,那就只有tidb在后台执行一些统计了,看看dashboard 能不能有些发现,截图看看

1 个赞

expensive_query 上周有,但是上周我处理过一遍了,现在搜基本上是没有了的。

1 个赞

profiling_2022-04-17_13-09-14.zip (4.3 MB)
我导出来了,麻烦大佬有空帮忙看看

1 个赞

expensive sql 基本上没有,可以看一下我回复上面那一位大哥的截图
慢查询上周我已经处理过大部分了,剩下的频率很低,或者是数据库自身的sql,例如analyze table,机器CPU的负载也很低了,慢sql很多的话CPU理论上是很高的


1 个赞

我在其他的大哥那里截图恢复了,有空麻烦帮忙看看

1 个赞


大家可以看看这个负载,周末压力真的不能再小了,数据库也就平均1k的qps。但是tidb的那个内存就是释放不下来,目前还不会宕机,我就是担心一直上涨耗完内存,最终不知道在某个时间节点GG

1 个赞


业务sql不多,tidb后台执行的sql是有的

1 个赞

一般不会推荐:在生产,混布 PD 和 Tidb

PD 是核心的调度中心,必须保持高可用的状态,一旦出现问题,方便扩容节点来保持状态
tidb 是无状态的节点,一个节点不够用,可以扩充其他的节点

建议你先将 PD 和 tidb 拆开…

2 个赞

混布 PD 和 Tidb是导致这个内存不释放的原因吗? 前两天快耗完机器内存了,没办法只能重启,瞬间就释放出来了

1 个赞

pd /tidb server监控面板都有内存记录,哪个高看下

1 个赞

把日志文件和慢日志文件清理一下,太多了。

1 个赞

tidb中有一个触发gc的配置,默认值gogc=100,意味着内存翻倍后触发gc,改成50就是内存增长50%后触发gc,越低触发的越频繁,对性能影响越大。

[performance]
gogc = 50

也可以通过ulimit限制单个进程的最大内存,超了就oom,然后自动拉起。

也可以限制tidb的最大连接数,连接数很多的话,会导致内存涨。如果前面有nginx做代理,可以改个平衡策略为least connection

当然以上都是治标的办法,最终为什么高,还是得查查。目前我知道一种情况是连接数增加的多就会导致高。

1 个赞

TiDB 的启动脚本中是否配置了 GODEBUG=madvdontneed=1 用于加速内存释放?

1 个赞