我正在运行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%.
我的问题是:
>这个问题有真正的解决方案吗?@H_301_18@> 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