Linux OOM 殺手禁用問題

Linux OOM 殺手禁用問題

我有一台沒有交換的 Linux 機器,它已經設定vm.overcommit_memory=2vm.overcommit_ratio=100。然而這些設定似乎沒有效果。一些試圖消耗大量記憶體的新啟動進程仍然被 OOM 殺死,而不是被拒絕記憶體分配。是否因為先前啟動的進程sysctl -w vm.overcommit_memory=2 vm.overcommit_ratio=100(例如/etc/sysctl.conf在啟動期間應用之前)仍然可以存取其過度使用的內存,從而觸發 OOM-killer?是否可以(1)使用核心參數停用記憶體過度使用,或(2)在運行時強制核心為所有進程分配所有過度使用的記憶體?

編輯:瀏覽相關內容後Documentation/和一些Linux原始碼後(git c6fa8e6de3)(1)似乎不太可能。

答案1

你正在嘗試一些根本不可能的事情。如果讓系統運作到接近耗盡的地步,總是會有一個行程因為記憶體耗盡而被殺死的可能。有很多場景是無法避免的,但最容易理解的是由於進程向其堆疊添加頁面而導致的頁面錯誤。

如果你想避免 oom 殺死,你需要交換或 RAM 緩衝。

相關內容