Fer*_*ndo 5 centos linux-kernel
我正在运行一个 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
Run Code Online (Sandbox Code Playgroud)
这会丢弃缓冲区/缓存。这将“修复”该问题,因为缓存使用率从未达到 100%。
我的问题是:
这个问题有真正的解决方案吗?
linux 内核不应该足够聪明以简单地从内存中清除旧的缓存页面而不是启动 kswap 吗?
毕竟,据我了解 RAM 内存的主要功能是供应用程序使用。缓存只是次要功能,如果您没有足够的内存,可以丢弃/忽略它。
我的内核版本是 3.10.0-229.14.1.el7.x86_64。
小智 2
这听起来好像您在一个 NUMA 节点上耗尽了 RAM,并且系统正在尝试释放该节点上的内存。如果您有一个进程使用大量内存(默认情况下)优先在该进程运行的节点上分配,则可能会发生这种情况。
看看这是否有帮助:
sysctl -w vm.zone_reclaim_mode=0
Run Code Online (Sandbox Code Playgroud)
有关大多数系统上默认 NUMA 策略可能出现的问题的详细说明,请参阅https://engineering.linkedin.com/performance/optimizing-linux-memory-management-low-latency-high-throughput-databases
归档时间: |
|
查看次数: |
2538 次 |
最近记录: |