設(shè)置交換空間

如何讓服務(wù)器響應(yīng)更快?如何避免應(yīng)用出現(xiàn)內(nèi)存不足的錯誤?最簡單的方法就是增加交換空間。Swap是存儲盤上的一塊自留地没讲,操作系統(tǒng)可以在這里暫存一些內(nèi)存里放不下的東西。

這從某種程度上相當(dāng)于增加了服務(wù)器的可用內(nèi)存华弓。雖然從swap讀寫比內(nèi)存慢食零,但總比沒有好,算是內(nèi)存不夠時的安全網(wǎng)寂屏。

如果沒有swap贰谣,則服務(wù)器一旦內(nèi)存不足,就會開始終止應(yīng)用以釋放內(nèi)存迁霎,甚至?xí)罎⒅ǜВ@會讓你丟失一些還沒來得及保存的數(shù)據(jù),或者造成當(dāng)機考廉。有些應(yīng)用明確要求系統(tǒng)配置swap以確保數(shù)據(jù)訪問的可靠性秘豹。

本文介紹如何在CentOS 7服務(wù)器上創(chuàng)建并啟用swap文件。

注:swap通常在傳統(tǒng)機械硬盤上表現(xiàn)更好昌粤,在SSD上使用swap可能會造成問題既绕,尤其是硬件老化之后。所以涮坐,對于DigitalOcean以及其他使用基于SSD的云主機服務(wù)的用戶凄贩,我們不推薦啟用swap。這甚至?xí)绊懙礁愕奶摂M機共用宿主機的其他用戶袱讹。

對于DigitalOcean用戶疲扎,提升性能的最佳方法就是更新Droplet。通常來說捷雕,升級后的主機表現(xiàn)都會有所提升椒丧,并且更不容易受到硬件問題的影響。

準備工作

首先救巷,你需要一臺CentOS 7服務(wù)器壶熏,配置過具備sudo權(quán)限的非root用戶(配置過程可參考這個教程的第一到第四步驟)。

準備就緒后征绸,以該用戶名SSH到你的CentOS服務(wù)器上久橙,準備安裝swap文件。

檢查系統(tǒng)的Swap信息

首先我們需要檢查系統(tǒng)的存儲管怠,看看是否已經(jīng)配置過swap淆衷。一個系統(tǒng)可以設(shè)置多個swap文件或分區(qū),不過一般來說一個就夠了渤弛。

使用swapon命令可以檢查系統(tǒng)是否已經(jīng)配置過swap祝拯,這是一個通用的swap工具。使用-s標簽可列出當(dāng)前存儲設(shè)備上的swap使用情況:

swapon -s

如果該命令沒有返回出結(jié)果,則代表該系統(tǒng)尚未配置過swap佳头。

或者鹰贵,我們也可以使用free工具來查看系統(tǒng)的整體內(nèi)存使用情況,這里可以看到內(nèi)存和swap的使用狀態(tài)(顯示單位為MB):

free -m

         total       used       free     shared    buffers     cached

Mem: 3953 315 3637 8 11 107
-/+ buffers/cache: 196 3756
Swap: 0 0 4095
這里可以看到我們這個系統(tǒng)的total swap空間為0康嘉,即沒有配置過swap碉输。這與我們在swapon里看到的結(jié)果相符合。

檢查可用的存儲空間

通常亭珍,我們建立一個單獨的分區(qū)作為swap敷钾。然而有時候由于硬件或軟件的限制,新建分區(qū)的方式無法實現(xiàn)肄梨,這種情況下就可以建立一個swap文件來實現(xiàn)同樣的功能阻荒。

開始之前,先檢查一下磁盤的可用空間众羡。輸入如下指令:

df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 59G 1.5G 55G 3% / devtmpfs 2.0G 0 2.0G 0% /dev tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 2.0G 8.3M 2.0G 1% /run tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
這里的-h標記是為了告訴dh將信息輸出為對人類友好的格式侨赡,比如以MB或GB為單位輸出空間使用和空余情況,而不是直接輸出內(nèi)存塊的個數(shù)粱侣。

從第一行可以看到我們的存儲分區(qū)上還有59GB的空間剩余羊壹,這足夠我們操作了。(我這是一臺中等規(guī)模的新建云主機齐婴,每個人的情況可能有很大不同舶掖。)

合適的swap空間是多大?關(guān)于這個問題有很多種選擇尔店,這取決于你的應(yīng)用需求和你個人的偏好。一般來說主慰,內(nèi)存容量的兩倍就是個不錯的起點嚣州。

我的系統(tǒng)內(nèi)存有4GB,如果設(shè)置8GB的swap會占據(jù)太多空間共螺,所以我決定只設(shè)置4GB就好该肴。

創(chuàng)建Swap文件

接下來我們將在文件系統(tǒng)上創(chuàng)建swap文件。我們要在根目錄(/)下創(chuàng)建一個名叫swapfile的文件藐不,當(dāng)然你也可以選擇你喜歡的文件名匀哄。該文件分配的空間將等于我們需要的swap空間。

最快捷的創(chuàng)建方式是fallocate命令雏蛮,該命令能夠創(chuàng)建一個預(yù)分配指定大小空間的文件涎嚼。輸入如下指令創(chuàng)建一個4GB的文件:

sudo fallocate -l 4G /swapfile

輸入密碼后,該swap文件將立即創(chuàng)建完畢挑秉。我們可以用ls命令檢查文件大蟹ㄌ荨:

ls -lh /swapfile
-rw-r--r-- 1 root root 4.0G Oct 30 11:00 /swapfile
至此,我們的swap文件就創(chuàng)建完畢了。

啟用Swap文件

現(xiàn)在我們已經(jīng)有了swap文件立哑,但系統(tǒng)還不知道應(yīng)該使用該文件作為swap夜惭,這就需要我們告知系統(tǒng)將該文件格式化為swap并啟用起來。

首先我們需要更改swap文件的權(quán)限铛绰,確保只有root才可讀诈茧,否則會有很大的安全隱患。使用chmod命令進行權(quán)限操作:

sudo chmod 600 /swapfile

如此捂掰,該文件的讀寫都只有root才能操作敢会。使用ls -lh命令檢查一下:

ls -lh /swapfile
-rw------- 1 root root 4.0G Oct 30 11:00 /swapfile

然后,使用如下命令告知系統(tǒng)將該文件用于swap:

sudo mkswap /swapfile

Setting up swapspace version 1, size = 4194300 KiB no label, UUID=b99230bb-21af-47bc-8c37-de41129c39bf
現(xiàn)在尘颓,這個swap文件就可以作為swap空間使用了走触。輸入如下命令開始使用該swap:

sudo swapon /swapfile
我們可以輸入如下命令來確認一下設(shè)置是否已經(jīng)生效:

swapon -s
Filename Type Size Used Priority /swapfile file 4194300 0 -1
可以看到返回的結(jié)果中已經(jīng)有我們剛才設(shè)置的swap。再使用free工具確認一下:

free -m total used free shared buffers cached Mem: 3953 315 3637 8 11 107 -/+ buffers/cache: 196 3756 Swap: 4095 0 4095
至此疤苹,我們的swap已經(jīng)設(shè)置完畢互广,操作系統(tǒng)會在需要的時候使用它。

使Swap文件永久生效

至此我們已經(jīng)在系統(tǒng)中啟用了swap文件卧土,然而一旦系統(tǒng)重啟后惫皱,服務(wù)器還不能自動啟用該文件。要讓系統(tǒng)在重啟后自動生效swap尤莺,我們可以通過修改fstab文件來實現(xiàn)(這是一個管理文件系統(tǒng)和分區(qū)的表)旅敷。

用sudo權(quán)限打開該文件編輯:

sudo nano /etc/fstab

在文件末尾加入下面這行內(nèi)容,告訴操作系統(tǒng)自動使用剛才創(chuàng)建的swap文件:

/swapfile swap swap sw 0 0

添加完畢后颤霎,保存退出媳谁。以后服務(wù)器每次重啟都會檢查該文件并自動啟用swap。

更改Swap配置(可選)

有幾個涉及swap的選項可能會影響到系統(tǒng)的性能表現(xiàn)友酱。大部分情況下這些選項是可選的晴音,具體要修改成什么樣則取決于你的應(yīng)用需求以及個人偏好。

Swappiness

swappiness參數(shù)決定了系統(tǒng)將數(shù)據(jù)從內(nèi)存交換到swap空間的頻率缔杉,數(shù)值設(shè)置在0到100之間锤躁,代表系統(tǒng)將數(shù)據(jù)從內(nèi)存交換到swap空間的力度。

該數(shù)值越接近于0或详,系統(tǒng)越傾向于不進行swap系羞,僅在必要的時候進行swap操作。由于swap要比內(nèi)存慢很多霸琴,因此減少對swap的依賴意味著更高的系統(tǒng)性能椒振。

該數(shù)值越接近于100,系統(tǒng)越傾向于多進行swap沈贝。有些應(yīng)用的內(nèi)存使用習(xí)慣更適合于這種情況杠人,這也于服務(wù)器的用途有關(guān)。

輸入如下命令查看當(dāng)前的swappiness數(shù)值:

cat /proc/sys/vm/swappiness 30

CentOS 7默認設(shè)置了30的swappiness,這對于大部分桌面系統(tǒng)和本地服務(wù)器是比較中庸的數(shù)值嗡善。對于VPS系統(tǒng)而言辑莫,可能接近于0的值是更加合適的。

使用sysctl命令可以修改swappiness罩引。比如將swappiness設(shè)為10:

sudo sysctl vm.swappiness=10 vm.swappiness = 10
本次修改將一直生效到下次重啟前各吨。如果希望永久修改該數(shù)值,則需要編輯sysctl配置文件:

sudo nano /etc/sysctl.conf
將以下內(nèi)容粘貼到文件末尾:

vm.swappiness = 10
編輯完成后袁铐,保存退出揭蜒,之后服務(wù)器每次重啟的時候會將swappiness設(shè)置為該值。

緩存壓力(Cache Pressure )

另一個可以考慮更改的配置項是vfs_cache_pressure剔桨,該配置項涉及特殊文件系統(tǒng)元文件條目的存儲屉更。對此類信息的頻繁讀取是非常消耗性能的,所以延長其在緩存的保存時間可以提升系統(tǒng)的性能洒缀。

通過proc文件系統(tǒng)查看緩存壓力的當(dāng)前設(shè)定值:

cat /proc/sys/vm/vfs_cache_pressure 100

這個數(shù)值是比較高的瑰谜,意味著系統(tǒng)從緩存中移除inode信息的速度比較快。一個保守一些的數(shù)值是50树绩,使用####sysctl命令進行設(shè)置:

sudo sysctl vm.vfs_cache_pressure=50 vm.vfs_cache_pressure = 50

這條命令僅在重啟前有效萨脑。要讓該設(shè)置永久有效,需要編輯sysctl配置文件:

sudo nano /etc/sysctl.conf
在文件末尾添加如下內(nèi)容:

vm.vfs_cache_pressure = 50
保存退出饺饭,服務(wù)器就會在每次重啟后都自動將緩存壓力設(shè)置為50了渤早。

總結(jié)

至此,我們的系統(tǒng)內(nèi)存就獲得了一些喘氣的空間瘫俊。有了swap空間可以有效避免一些常見的問題鹊杖。

如果你仍然會遇到內(nèi)存不足(OOM,out of memory)的錯誤信息扛芽,或者你的系統(tǒng)不能運行你需要的應(yīng)用仅淑,那么最好的方法是優(yōu)化你的應(yīng)用配置或者升級你的服務(wù)器,不過配置swap空間也不失為一個靈活的節(jié)省方案胸哥。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市赡鲜,隨后出現(xiàn)的幾起案子空厌,更是在濱河造成了極大的恐慌,老刑警劉巖银酬,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嘲更,死亡現(xiàn)場離奇詭異,居然都是意外死亡揩瞪,警方通過查閱死者的電腦和手機赋朦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人宠哄,你說我怎么就攤上這事壹将。” “怎么了毛嫉?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵诽俯,是天一觀的道長。 經(jīng)常有香客問我承粤,道長暴区,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任辛臊,我火速辦了婚禮仙粱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘彻舰。我一直安慰自己伐割,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布淹遵。 她就那樣靜靜地躺著口猜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪透揣。 梳的紋絲不亂的頭發(fā)上济炎,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機與錄音辐真,去河邊找鬼须尚。 笑死,一個胖子當(dāng)著我的面吹牛侍咱,可吹牛的內(nèi)容都是我干的耐床。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼楔脯,長吁一口氣:“原來是場噩夢啊……” “哼撩轰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起昧廷,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤堪嫂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后木柬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谭期,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡哗魂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年攻询,在試婚紗的時候發(fā)現(xiàn)自己被綠了疏之。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怜森。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖谤牡,靈堂內(nèi)的尸體忽然破棺而出副硅,到底是詐尸還是另有隱情,我是刑警寧澤拓哟,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布想许,位于F島的核電站,受9級特大地震影響断序,放射性物質(zhì)發(fā)生泄漏流纹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一违诗、第九天 我趴在偏房一處隱蔽的房頂上張望漱凝。 院中可真熱鬧,春花似錦诸迟、人聲如沸茸炒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽壁公。三九已至,卻和暖如春绅项,著一層夾襖步出監(jiān)牢的瞬間紊册,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工快耿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留囊陡,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓掀亥,卻偏偏與公主長得像撞反,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子搪花,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容