Linux

為什麼在剩餘大量可用記憶體時使用 Swap?

  • May 28, 2018

我有很好的網路(專用)伺服器和良好的記憶體資源:

System information
Server load     2.19 (8 CPUs)   
Memory Used     29.53% (4,804,144 of 16,267,652)    
Swap Used   10.52% (220,612 of 2,097,136)   

如您所見,當有大量可用記憶體時,我的伺服器正在使用交換。

這是正常的還是配置或編碼有問題?

注意

由於某種原因,我的 MySQL 程序使用了超過 160% 的 CPU 功率;我不知道為什麼,但我沒有超過 70 個同時使用者…

這是完全正常的。

在系統啟動時,會啟動許多服務。這些服務會自行初始化、讀入配置文件、創建資料結構等等。他們使用一些記憶體。在系統啟動的整個過程中,這些服務中的許多將永遠不會再次執行,因為您沒有使用它們。其中一些可能會在數小時、數天或數週內執行。然而,所有這些數據都在物理記憶體中。

當然,系統不能丟棄這些數據。它不能證明它實際上永遠不會被訪問。例如,其中一項服務可能是為您提供對盒子的遠端訪問的服務。您可能一周內沒有使用它,但如果您確實使用它,它會更好地工作。

但是系統知道它可能希望將物理記憶體用於磁碟記憶體或其他可以提高性能的方式。所以它會進行機會性交換。當它無事可做時,它會使用交換空間將很長時間未使用的數據寫入磁碟。但是,它仍然將頁面保存在物理記憶體中。所以它們仍然可以被訪問,而無需交換它們。

現在,如果系統稍後需要該物理記憶體來做其他事情,它可以簡單地丟棄這些頁面,因為它已經將它們寫入交換。這為系統提供了兩全其美的效果。數據仍保存在記憶體中,因此無需從磁碟讀取即可訪問。但是,如果系統需要該記憶體用於其他目的,則不必先將其寫出。大獲全勝。

引用自:https://serverfault.com/questions/420778