反馈CPU sys占用较高,排查下发现 !!!
现象
12.18日,业务反馈服务器cpu idle特别低,之后十几分钟自行恢复,突然又重新复现idle低的现象,希望排查下原因。
排查过程
- 登陆服务器,使用top发现cpu.sys占用60%左右,导致cpu idle低。
- 通过perf top发现占用cpu最多的函数 pageblock_pfn_to_page()。
- 该函数为内核内存紧凑功能,相关代码参考内核/mm/compaction.c
- 猜测和服务器内存紧张有关。通过free 发现cache占用较大,且使用了swap,服务器此时内存确实紧张。
- 通过slabtop发现slab使用较多,需要清理内存,slab和page cache均需要清理下。
解决
sync && echo 3 > /proc/sys/vm/drop_caches
通过清除slab和cache占用,释放内存。
通过sync将脏页刷盘,可以清除更多的buffer。
CPU sys高的问题也随之恢复:
其他相关
内存紧凑是内核内存管理相关的内容,拓展可参考这位大神的博文:
内存紧凑(内存压缩)
可以关闭透明大页,减少内存的不连续:
centos 6:
echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled
echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag
centos 7:
echo never >/sys/kernel/mm/transparent_hugepage/enabled
echo never >/sys/kernel/mm/transparent_hugepage/defrag
赞赏支持一下