首頁 > 軟體

如何修改Linux核心引數vm.swappiness

2023-02-12 06:01:56

修改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頻率並降低速度。

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com