Linux

當記憶體被填滿時會發生什麼:一頁驅逐或整個程序被殺死?

  • July 1, 2020

問題很簡單,但我沒有找到資訊(更準確地說,我找到了有關這兩個選項的資訊(下面的選項),但沒有說明在每種情況下使用哪一個)。

選項 1:核心決定哪個是可以從記憶體中逐出並交換到磁碟的最佳頁面,並且發生逐出以便新頁面可以到達。

選項 2:核心一次殺死一個(或多個)程序以釋放大量記憶體空間。

第二個選項在性能上似乎更好(而不是一一進行,您一次釋放許多記憶體頁面)但它的問題是殺死程序。那麼,我提到的兩個選項中的哪一個正在實現現代 linux 發行版?是否取決於具體情況?

如果它取決於確切的 linux 發行版,請以一般方式回答。

根據具體情況使用這兩個選項。

當核心需要分配頁面,並且沒有可用的頁面(或已達到水印)時,它會嘗試從非活動列表中回收頁面(在 中查找“不活動” /proc/meminfo)。在那裡回收頁面不一定涉及交換:

  • 非臟的、文件支持的頁面將被丟棄(它們可以從它們的備份儲存中恢復);
  • 臟的、文件支持的頁面將被寫入它們的備份儲存並被丟棄;
  • 只有沒有自己的備份儲存的可驅逐頁面才會涉及交換。

OOM 殺手只有在上述情況還不夠時才會介入;它選擇“最差”的過程(基於許多標準)並殺死它。

引用自:https://unix.stackexchange.com/questions/595956