Memory
如果 Linux 發行版安裝時沒有交換,並且當它幾乎沒有 RAM 時執行一個新應用程序會發生什麼?
如果安裝了沒有交換分區或交換文件的 Linux,比如 Arch Linux 或 Debian,會發生什麼情況。然後,當在幾乎沒有 RAM 的情況下執行作業系統時,使用者會打開一個新應用程序。考慮到這個新應用程序需要的 RAM 記憶體比實際需要的多,會發生什麼?
作業系統的哪一部分處理 RAM 管理操作,我可以將其配置為不同的行為嗎?
Linux 核心有一個稱為 OOM 殺手(記憶體不足)的組件。正如帕特里克在評論中指出的那樣,OOM 殺手可以被禁用,但預設設置是允許過度使用(從而啟用 OOM 殺手)。
應用程序向核心請求更多的記憶體,而核心可以拒絕給他們(因為沒有足夠的記憶體或者因為
ulimit
已經被用來拒絕給程序更多的記憶體)。如果啟用了過量使用,則應用程序已請求一些記憶體並被授予該數量,但如果應用程序寫入新的記憶體頁面(第一次)並且核心實際上必須為此分配記憶體但不能這樣做,那麼核心必須決定要殺死哪個程序以釋放記憶體。核心寧願殺死新程序也不願殺死舊程序,尤其是那些(連同他們的孩子)消耗大量記憶體的程序。因此,在您的情況下,新程序可能會開始,但可能會被殺死。
您可以使用文件
/proc/self/oom_adj /proc/self/oom_score /proc/self/oom_score_adj
檢查目前設置並告訴核心在必要時它應該以什麼順序殺死程序。