本文介绍了在Alibaba Cloud Linux 2/3系统中,内存压力较大的业务场景下(启动多个Executor进程进行压力测试时),CPU Sys占用率过高的原因及其解决方案。
问题现象
在内存压力较大的业务场景下(例如大数据业务通过Spark Thrift Server启动多个Executor进程进行压力测试时),系统的CPU Sys占用率较高。
问题原因
在Alibaba Cloud Linux 2/3系统中,内核提供了后台回收机制(kswapd)。由于系统默认的min水线和low水线之间的内存空间缓存区较小,在进行业务压测时,程序大量申请内存,导致内存从低水线迅速降至最小水线,这引起了直接内存的回收,从而使得CPU Sys占用率变高。
解决方案
通过调高watermark_scale_factor
参数的值,可以增大系统中low水线与min水线之间的差值,从而更早地唤醒kswapd
进行内存后台回收,以避免引发直接内存的回收。
说明
watermark_scale_factor
用于控制min、low和high水线之间的间隔。该数值越大,水线间隔也越大,默认值为10,在实际使用中会将该数值/10000,约等于总内存的 0.1%。
low水线 ≈ min水线 + watermark_scale_factor * total / 10000
high水线 ≈ low水线 + watermark_scale_factor * total / 10000
执行以下命令,调整watermark_scale_factor的值。
watermark_scale_factor
的值应根据实际情况进行设置。以设置watermark_scale_factor
值为150为例,即调整为系统总内存的1.5%。sudo sh -c 'echo 150 > /proc/sys/vm/watermark_scale_factor'
查看修改是否成功。
cat /proc/zoneinfo
执行结果如下图所示。
文档内容是否对您有帮助?