即使有 100GB 以上的可用 RAM,kswap 也会占用 100% 的 CPU

即使有 100GB 以上的可用 RAM,kswap 也会占用 100% 的 CPU

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

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

问题是,当缓存填满可用 RAM 时,两个 kswapd 进程将开始使用 100% 的 CPU,并且我突然发现所有 CPU 也显示 99% 的系统使用率(不是等待或用户,主要是系统)。

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

目前我没有交换分区,但即使我有一个,也会发生这个问题。

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

 echo 3 > /proc/sys/vm/drop_caches

这会删除缓冲区/缓存。这将“修复”该问题,因为缓存使用率永远不会达到 100%。

我的问题是:

  • 这个问题有真正的解决方案吗?

  • Linux 内核难道不应该足够智能,简单地从内存中清除旧的缓存页面,而不是启动 kswap 吗?

毕竟,据我所知,RAM 内存的主要功能是供应用程序使用。缓存只是次要功能,如果内存不足,可以丢弃/忽略它。

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

答案1

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

看看这是否有帮助:

sysctl -w vm.zone_reclaim_mode=0

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

相关内容