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