Linux
當記憶體被填滿時會發生什麼:一頁驅逐或整個程序被殺死?
問題很簡單,但我沒有找到資訊(更準確地說,我找到了有關這兩個選項的資訊(下面的選項),但沒有說明在每種情況下使用哪一個)。
選項 1:核心決定哪個是可以從記憶體中逐出並交換到磁碟的最佳頁面,並且發生逐出以便新頁面可以到達。
選項 2:核心一次殺死一個(或多個)程序以釋放大量記憶體空間。
第二個選項在性能上似乎更好(而不是一一進行,您一次釋放許多記憶體頁面)但它的問題是殺死程序。那麼,我提到的兩個選項中的哪一個正在實現現代 linux 發行版?是否取決於具體情況?
如果它取決於確切的 linux 發行版,請以一般方式回答。
根據具體情況使用這兩個選項。
當核心需要分配頁面,並且沒有可用的頁面(或已達到水印)時,它會嘗試從非活動列表中回收頁面(在 中查找“不活動”
/proc/meminfo
)。在那裡回收頁面不一定涉及交換:
- 非臟的、文件支持的頁面將被丟棄(它們可以從它們的備份儲存中恢復);
- 臟的、文件支持的頁面將被寫入它們的備份儲存並被丟棄;
- 只有沒有自己的備份儲存的可驅逐頁面才會涉及交換。
OOM 殺手只有在上述情況還不夠時才會介入;它選擇“最差”的過程(基於許多標準)並殺死它。