问题
应用反馈三节点集群中,在应用负载均衡的情况下,其中一个节点的负载比其他节点高出4倍左右,需要分析根因。

分析过程
问题节点CPU的使用:
可以看到,问题节点的CPU消耗中,sys使用为22%,user为9.7%,且问题出现的时候基本都是这个比例。经常分析问题的同学肯定警觉起来,这大概率不是一个正常现象。

为了进一步分析sysCPU的消耗,采用perf工具采集CPU 调用栈信息
核心调用堆栈:
bgdistschpool>unknown>unknown>libc-2.17.so>system_call_fastpath>sys_newstat>sysc_newstat>vfs_fstatat>user_path_at>user_path_at_empty>filename_lookup>path_lookupat>lookup_fast>_d_lookup_rcu

细分CPU的使用发现 系统在涉及inode的操作,获取文件状态的时候消耗大量sys CPU。
问题节点A上的文件上在1612万,其余两个正常节点B和C的上所有数据库文件数不超过200万,在问题节点A上仅仅DB.TAB1这一张表的目录下有919万个文件,DB数据库加起来有1612万。
TAB1绝大部分是detached目录下20241108_1708左右产生的备份文件。
此外如下三张表的在A上的文件数远远大于正常节点,分别做清理和转移备份
A 分区数/文件数 | B 分区数/文件数 | C 分区数/文件数 | |
|---|---|---|---|
TAB1 | 38/1934420 | 38/2209 | 38/2209 |
TAB2 | ?/1576975 | ?/78654 | ?/79635 |
TAB3 | ?/1574122 | ?/78654 | ?/79635 |
TAB2和TAB3为分布式表,正常只应该存在表定义,不存在数据文件。现在出现100多万的数据文件是异常行为
Bug ID | 描述 | 影响版本 | 修复版本 |
|---|---|---|---|
CH-29347 | 分布式表目录下错误生成数据文件 | 20.8.x | 21.3+ |
CH-30182 | 分布式表写入路径校验失败导致本地文件泄漏 | 20.8.1-20.8.11 | 20.8.12 |
转移TAB2和TAB3下的文件后,CPU消耗恢复正常。将数据库升级到22.8后问题不再复现。