目錄
- 修改Linux內核參數vm.swappiness
- 調整vm.swappiness的方法
- 了解vm.swappiness
- 使用交換
- vm.swappiness
- 小結一下吧
- 總結
修改Linux內核參數vm.swappiness
內核參數vm.swappiness控制換出運行時內存的相對權重,參數值大小對如何使用swap分區有很大聯系。
值越大,表示越積極使用swap分區,越小表示越積極使用物理內存。
默認值swappiness=60,表示內存使用率超過100-60=40%時開始使用交換分區。
swappiness=0的時候表示最大限度使用物理內存,然后才是 swap空間;swappiness=100的時候表示積極使用swap分區,并把內存上的數據及時搬運到swap空間。(網上有的說,對于3.5以后的內核和RedHat 2.6.32之后的內核,設置為0會禁止使用swap,從而引發out of memory,這種情況可以設置為1。)
需要根據服務器運行的程序類型,來設置不同的參數值。例如,對于Oracle一般設置為10;對于MySQL一般設置為1,盡可能不用swap分區。
調整vm.swappiness的方法
1、查看參數值:
cat /proc/sys/vm/swappiness
2、臨時調整:
sysctl vm.swappiness = 10? cat /proc/sys/vm/swappiness
3、永久調整:
vi /etc/sysctl.conf?
修改vm.swappiness=10
然后加載參數:
sysctl -p
完畢。
了解vm.swappiness
Linux內核是一個相當復雜的軟件,具有許多組件,例如模塊,接口和配置文件[1]。
些組件可以配置有特定值,以實現組件[2,3,4]的所需行為或操作模式。隨后,此設置將直接影響整個Linux系統的行為和性能。
Linux內核及其組件的當前值可通過特殊接口/ proc目錄[5]進行訪問。這是一個虛擬文件系統,其中單個文件實時填充值。這些值表示Linux內核所處的實際狀態。
您可以使用cat命令訪問/ proc目錄中的各個文件,如下所示:
$ cat / proc / sys / net / core / somaxconn 128 $
這些內核參數之一稱為vm.swappiness。它“控制從運行時內存中交換出來的相對權重,與從系統頁面緩存中刪除內存頁面相反” [6]。從Linux內核2.6版開始,引入了此值。它存儲在文件/ proc / sys / vm / swappiness中。
使用交換
在1990年代初期,使用swap [6]是使用小型UNIX計算機的重要組成部分。當討厭的內存泄漏干擾您的工作時,它仍然很有用(例如,在您的車輛中裝有備用輪胎)。機器將變慢,但在大多數情況下仍可用于完成其分配的任務。自由軟件開發人員一直在減少和消除程序錯誤方面取得了長足的進步,因此在更改內核參數之前,請先考慮將其更新為應用程序和相關庫的較新版本。
如果您運行大量任務,則非活動任務將被換出到磁盤上,從而更好地利用了活動任務中的內存。視頻編輯和其他占用大量內存的應用程序通常建議使用一定數量的內存和磁盤空間。如果您有一臺無法升級內存的舊機器,那么提供更多的交換空間可能是一個不錯的臨時解決方案(有關更多信息,請參見[6])。
交換可以發生在單獨的分區或交換文件上。該分區速度更快,并且受到許多數據庫應用程序的青睞。文件方法更加靈活(請參閱Debian GNU / Linux中的dphys-swapfile軟件包[7])。具有多個用于交換的物理設備允許Linux內核選擇最快速可用的設備(較低的延遲)。
vm.swappiness
vm.swappiness的默認值為60,它表示激活交換之前可用內存的百分比。值越低,使用的交換越少,并且物理內存中保留的內存頁越多。
60的值是一個折衷方案,非常適合現代臺式機系統。建議將較小的值用于服務器系統。正如Red Hat Performance Tuning手冊指出的那樣[8],對于數據庫工作負載,建議使用較小的swappiness值。
例如,對于Oracle數據庫,Red Hat建議將swappiness的值設置為10。相反,對于MariaDB數據庫,建議將swappiness的值設置為1 [9]。
更改值直接影響Linux系統的性能。定義了這些值:
- * 0:禁用交換
- * 1:不完全禁用交換的最小數量
- * 10:當系統中有足夠內存時為提高性能而推薦的值
- * 100:主動交換
如上所示,cat命令有助于讀取該值。同樣,sysctl命令為您提供相同的結果:
#sysctl vm.swappiness vm.swappiness = 60 #
請記住,sysctl命令僅對管理用戶可用。要設置該值,請在/ proc文件系統中臨時設置該值,如下所示:
#回聲 10 > / PROC / SYS / VM / swappiness
或者,您可以使用sysctl命令,如下所示:
#的sysctl -w vm.swappiness = 10
要永久設置該值,請以管理用戶身份打開文件/etc/sysctl.conf并添加以下行:
vm.swappiness = 10
小結一下吧
越來越多的Linux用戶正在運行虛擬機。除了實際控制硬件的管理程序外,每個人都有其自己的內核。虛擬機具有為其創建的虛擬磁盤,因此更改虛擬機內部的設置將獲得不確定的結果。首先嘗試更改虛擬機管理程序內核的值,因為它實際上控制著計算機中的硬件。
對于不再能夠升級的舊計算機(已經具有最大支持的內存),您可以考慮在計算機中放置一個小型固態磁盤,以將其用作其他交換設備。由于存儲單元因大量寫入而失敗,因此這顯然將成為一種消耗,但是可以以非常低的成本將機器的壽命延長一年或更長時間。與交換到普通磁盤相比,較低的延遲和快速讀取將提供更好的性能,從而為RAM提供中間結果。這應該允許您使用較低的vm.swappiness值以獲得最佳性能。您將不得不嘗試。SSD設備正在快速變化。
如果您有多個交換設備,請考慮使其成為RAID設備以跨可用設備對數據進行條帶化。
您可以在不重啟計算機的情況下更改交換性,這是與其他操作系統相比的一大優勢。
嘗試僅包括您業務所需的服務。這將減少內存需求,提高性能并簡化一切。
最后一點:您將為交換設備增加負載。您將需要監視它們的溫度。過熱的系統將降低其CPU頻率并降低速度。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持。