centos – kswap使用100%的CPU,即使有100GB的RAM也可用

我正在运行Centos 7 ESXi VM,具有近300GB的RAM和24个vCPU.

平均负载为3,应用程序几乎从不使用超过150GB的RAM.其余的可用内存由Linux用于缓存.

问题是,当缓存填满可用的RAM时,两个kswapd进程将开始使用100%的CPU,突然我看到所有CPU也显示99%的sys使用率(它不是等待或用户,它主要是sys).

这将导致高负载(100)几分钟,直到系统恢复并且负载再次降至3.

此刻我没有交换分区,但即使我有一个这个问题发生了.

我找到的一个“解决方案”是每天执行以下命令:

echo 3 > /proc/sys/vm/drop_caches

它会丢弃缓冲区/缓存.这将“解决”问题,因为缓存使用率从未达到100%.

我的问题是:

>这个问题有真正的解决方案吗?
> Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

毕竟,根据我的理解,RAM内存的主要功能是应用程序使用.缓存只是一个辅助功能,如果没有足够的内存,可以丢弃/忽略.

我的内核版本是3.10.0-229.14.1.el7.x86_64.

这听起来好像你在一个NUMA节点上耗尽了RAM,并且系统正在试图释放该节点上的内存.如果您使用大量内存的单个进程(默认情况下)优先分配在运行该进程的节点上,则会发生这种情况.

看看这是否有帮助:

sysctl -w vm.zone_reclaim_mode=0

有关大多数系统上默认NUMA策略可能出现的问题的详细说明,请参阅https://engineering.linkedin.com/performance/optimizing-linux-memory-management-low-latency-high-throughput-databases

相关文章

linux下开机自启: 在/etc/init.d目录下新建文件elasticsear...
1、因为在centos7中/etc/rc.d/rc.local的权限被降低了,所以...
最简单的查看方法可以使用ls -ll、ls-lh命令进行查看,当使用...
ASP.NET Core应用程序发布linux在shell中运行是正常的。可一...
设置时区(CentOS 7) 先执行命令timedatectl status|grep &...
vim /etc/sysconfig/network-scripts/ifcfg-eth0 B...