内存紧凑导致cpu.sys高-case分析

本文阅读量 Posted by Kird on 2019-12-18
反馈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



支付宝打赏 微信打赏

赞赏支持一下