tidb-server其中一台的内存占用很高,cpu也很高,该如何排查


出现一个很奇怪的现象,其中一台tidb的内存跟cpu很高,该如何排查这种单节点的问题

我要怎么知道他在做什么事

感觉不是在执行某个大sql导致的,这个内存跟一直在缓慢上升,大概3天就满了
像是内存泄露问题,版本是8.1.1

select * from INFORMATION_SCHEMA.CLUSTER_PROCESSLIST t where t.COMMAND<>‘Sleep’ and t.HOST=‘172.27.0.29:10080’ and time>0

查下正在执行的sql,具体干啥的,多执行一会儿一直看

1 个赞

看Dashboard的Top SQL,里面记录着每个节点占用CPU最高的SQL

1 个赞

有日志吗?tidb.log看一下,看看执行的SQL,有没有全表的操作,长时间不释放的连接有吗?

看下统计信息收集任务是不是都跑在这一个节点上

1、看tidb dashboard的top sql,可以查看到这个tidb节点的消耗cpu最高的top 5的SQL语句
2、也可以通过弄一个crontab,不断的记录这些信息到一个日志文件中,看下CPU和内存高的时候,有哪些SQL语句在跑,建议在每次执行的时候,输出下时间点的信息
select * from INFORMATION_SCHEMA.CLUSTER_PROCESSLIST t where t.COMMAND<>‘Sleep’ and t.HOST =‘172.27.0.29:10080’ and time>0
3、查看下这个tidb节点的慢日志里面有没有一些执行慢的SQL

1.看监控看tidb dashboard的top sql和慢查询。
2.看下流量可视化,看看哪一块最亮,分别看看读和写。看看哪个影响的。

如果负载相同的情况下,内存使用高于其他节点不太正常。最直接的方案可以通过 dashboard 抓一下内存火焰图或者手工收集 curl http://{TiDBIP}:10080/debug/zip?seconds=30 --output debug.zip(debug.zip 需要使用 go tool pprof 分析)。看下当前内存占用情况。

内存高的话我记得有个 issue https://github.com/pingcap/tidb/issues/52826
可以 check 下 internal sql 有没有时常运行这个 sql


是的话应该就是命中了上述 issue ;