调高min_free_kbytes(如设为总内存1.5%~2.5%)可提前触发内存回收,避免OOM;增大watermark_scale_factor(建议30~50)拉宽水位差以保障大页分配;定期compact_memory减少外部碎片;调低vfs_cache_pressure抑制pagecache过度膨胀。

Linux频繁触发OOM Killer,往往不是内存真不够,而是内核在碎片化严重或水位设置不合理时“误判”为内存耗尽。关键在于让内核更早、更稳地回收内存,而不是等到最后一刻杀进程。
调高min_free_kbytes,提前启动内存回收
这是最直接有效的干预手段。默认值通常太小(比如几MB),导致内核直到空闲内存极低才开始异步回收,此时碎片已多、大页难分配,容易触发OOM。
- 建议设为总内存的1.5%~2.5%,例如64GB内存(65536MB ≈ 67108864KB),可设为1200000(约1.17GB)
- 临时生效:sysctl -w vm.min_free_kbytes=1200000
- 永久生效:写入/etc/sysctl.conf,追加vm.min_free_kbytes = 1200000,再运行sysctl -p
增大watermark_scale_factor,拉宽low与min水位差
low水位决定内核是否尝试回收大块连续内存(如用于透明大页或DMA)。若min和low靠得太近,系统很难腾出足够连续页,申请大内存时就容易失败并触发OOM。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~