記憶體緊張時,會觸發記憶體回收,記憶體回收會嘗試回收reclaimable(可被回收的)記憶體,這部分記憶體既包含Page Cache又包含reclaimable kernel memory(比如slab):
Reclaimer指回收者,可以是核心線程(包括kswapd)、使用者線程。回收時,它會依次掃描pagecache page、slab page中有哪些可被回收:
- 若有,就嘗試去回收
- 若無,就跳過
在掃描可回收page的過程中,回收者一開始掃描的較少,然後逐漸增加掃描比例,直至全部都掃完。這就是記憶體回收大緻過程。
$ grep inodesteal /proc/vmstat
pginodesteal 114341
kswapd_inodesteal 1291853