今天我注意到我發現了以下事情:
正如您所看到的,RAM 幾乎是空閒的,交換空間的使用率非常高。根據我的教科書知識,我曾經認為Linux作業系統試圖充分利用RAM,當RAM不足時,它會將一些最少使用的頁面從RAM移動到交換空間。
如果我的理論知識不正確,有人可以解釋一下,並解釋一下它在 Linux 世界中的實際運作原理嗎?
答案1
雖然即使可能有剩餘內存,內核也會使用交換,但使用超過三分之二的內存可能表明伺服器歷史上可能耗盡內存,這就是它開始交換的原因。我會將交換使用情況與 sar 報告中的記憶體使用情況相關聯,以推斷系統是否有足夠的 RAM。我還會檢查 dmesg 或日誌,以確定伺服器是否確實耗盡了內存,並且 oom-killer 啟動了。
答案2
即使您有足夠的可用內存,Linux 核心也會開始交換內存頁面。您可以透過設定自訂交換來微調此行為。
http://en.wikipedia.org/wiki/Swappiness
對於伺服器,如果您始終有足夠的記憶體來滿足工作負載,我建議將 swappiness 設為 1。對於工作站,我建議使用預設值 60。
# check the current value
cat /proc/sys/vm/swappiness
60
# swappiness = 1 (swap only if necessary)
echo 1 > /proc/sys/vm/swappiness
# or use sysctl
sysctl -w vm.swappiness=1
透過設定使 /etc/sysctl.conf 中的設定永久生效
vm.swappiness=1
並重新加載它
sysctl -w
答案3
不幸的是,有些應用程式會直接進行交換,故意跳過 RAM。看著你,Chrome(還有一度 Photoshop)。使這些應用程式不進行交換的唯一方法是在沒有交換分區的情況下運行。即使 swappiness 0 IIRC 仍然會給他們存取權限,因為他們明確要求它。
改變上面的交換性將適用於其他一切。不過我建議使用 10-20 的值而不是 1。