我正在运行一个Centos 7 ESXi虚拟机,有近300GB的RAM和24个vCPU。
平均负载是3,应用程序几乎从不使用超过150GB的RAM。 其余的可用内存被Linux用于caching。
问题是,当caching填满可用RAM时,两个kswapd进程将使用100%的CPU启动,突然间我看到所有CPU也显示了99%的系统使用率(不是等待或用户,主要是sys)。
这会在几分钟内导致高负载(100+),直到系统恢复并且负载再次下降到3。
在这一刻我没有交换分区,但即使我有一个这个问题发生。
我发现的一个“解决scheme”是每天执行以下命令:
echo 3 > /proc/sys/vm/drop_caches
其中丢弃缓冲区/caching。 这将“修复”这个问题,因为caching使用从未达到100%。
我的问题是:
这个问题是否有真正的解决scheme?
Linux内核不应该足够聪明,只需从内存中清除旧的caching页面,而不是启动kswap?
毕竟,从我所了解的RAM内存的主要function是由应用程序使用。 caching只是一个次要的function,如果你没有足够的内存,它可以被丢弃/忽略。
我的内核版本是3.10.0-229.14.1.el7.x86_64。
这听起来像是你在一个NUMA节点上的内存不足,系统正在尝试释放该节点上的内存。 如果您有一个使用大量内存的进程,则会发生这种情况,默认情况下,该进程会优先分配到运行进程的节点上。
看看这是否有帮助:
sysctl -w vm.zone_reclaim_mode=0
有关大多数系统上的默认NUMA策略可能出现的问题的更详细的描述,请参阅https://engineering.linkedin.com/performance/optimizing-linux-memory-management-low-latency-high-throughput-databases