1 前言
Linux系統(tǒng)中物理內(nèi)存不足時(shí)播急,操作系統(tǒng)會(huì)將運(yùn)行中的程序(比較閑的程序)暫時(shí)拿到交換分區(qū)(Swap)中,以保證物理內(nèi)存來(lái)運(yùn)行其它程序售睹。等Swap中的程序要運(yùn)行時(shí)桩警,再?gòu)腟wap分區(qū)中恢復(fù)保存的數(shù)據(jù)到內(nèi)存中。
2 使用背景
現(xiàn)在服務(wù)器內(nèi)存越來(lái)越大侣姆,動(dòng)不動(dòng)就16G生真、32G、64G甚至上百G捺宗,操作系統(tǒng)官網(wǎng)也給建議盡量使用系統(tǒng)物理內(nèi)存柱蟀,交換分區(qū)(SWAP)在應(yīng)用中所占的比例越來(lái)越小,甚至不使用了蚜厉。
可是對(duì)于個(gè)人长已、小個(gè)體甚至小微企業(yè)來(lái)說(shuō)服務(wù)器的費(fèi)用還是能省則省,內(nèi)存已然捉襟見(jiàn)肘昼牛。本人有一臺(tái)1核/2G的服務(wù)器和一臺(tái)2核/4G的服務(wù)器术瓮,部署了五六個(gè)應(yīng)用后就到極限了,動(dòng)不動(dòng)就崩潰了贰健。
特別在微服務(wù)大行其道的今天胞四,一個(gè)項(xiàng)目上去內(nèi)存就占滿了。所以伶椿,再嚼嚼交換分區(qū)辜伟,一切為了錢(qián)。
3 Swap分區(qū)大小選擇
Swap分區(qū)大小設(shè)置的建議:
- 物理內(nèi)存小于2GB脊另,Swap建議為物理內(nèi)存的2倍导狡;
- 物理內(nèi)存2GB~8GB,Swap分區(qū)大小等于物理內(nèi)存偎痛;
- 物理內(nèi)存8GB~64GB旱捧,Swap分區(qū)大小最小為8G;
- 物理內(nèi)存大于64GB踩麦,Swap分區(qū)至少為16G枚赡;
事實(shí)上氓癌,Swap分區(qū)的大小并不取決于物理內(nèi)存的量,而是根據(jù)業(yè)務(wù)場(chǎng)景标锄,客戶需求和系統(tǒng)中內(nèi)存的負(fù)荷顽铸,所以拋開(kāi)業(yè)務(wù)場(chǎng)景、顯示來(lái)談Swap意義并不大料皇;如果我的服務(wù)器內(nèi)存很大谓松,也不會(huì)瞎折騰O(∩_∩)O哈哈~
4 何時(shí)使用Swap
不是等所有的物理內(nèi)存都消耗完畢之后,才會(huì)去使用Swap的空間践剂,什么時(shí)候使用是由swappiness參數(shù)值控制及系統(tǒng)調(diào)度的鬼譬。
目前云服務(wù)器的Swap起始狀態(tài)都是0,swappiness也為0逊脯,這就表示只能使用物理內(nèi)存优质,如下圖:
cat /proc/sys/vm/swappiness
該值在CentOS 6上是60,在CentOS 7上建議是30军洼,可以看出隨著硬件的降價(jià)巩螃,交換分區(qū)的比重越來(lái)越輕了。
swappiness設(shè)置為0時(shí)會(huì)最大限度使用物理內(nèi)存匕争,然后才是Swap空間避乏;設(shè)置為100的時(shí)候表示積極的使用swap分區(qū),并且把內(nèi)存上的數(shù)據(jù)及時(shí)的搬運(yùn)到swap空間里面甘桑。
現(xiàn)在生產(chǎn)服務(wù)器用戶動(dòng)不動(dòng)上百萬(wàn)拍皮,內(nèi)存上百G,對(duì)用戶體驗(yàn)跑杭,相應(yīng)速度都要求極高铆帽,我們可以降低系統(tǒng)對(duì)Swap的使用,甚至全部使用內(nèi)存德谅。
5 如何修改swappiness參數(shù)
5.1 臨時(shí)性修改爹橱,系統(tǒng)重啟恢復(fù)默認(rèn)
sysctl vm.swappiness=10
cat /proc/sys/vm/swappiness
5.2 永久修改,重啟生效
在/etc/sysctl.conf 文件里添加如下參數(shù):
vm.swappiness=10
# 加載配置
sysctl -p
6 創(chuàng)建交換分區(qū)
云服務(wù)器默認(rèn)交換分區(qū)為0窄做,默認(rèn)只使用物理內(nèi)存宅荤;我的小服務(wù)器只能手動(dòng)設(shè)置開(kāi)啟交換分區(qū)咯!下面是創(chuàng)建并使用交換分區(qū)的步驟浸策。
6.1 創(chuàng)建Swap分區(qū)
/dev/zero文件代表一個(gè)永遠(yuǎn)輸出0的設(shè)備文件,可以用它來(lái)創(chuàng)建空文件惹盼。后兩個(gè)參數(shù)可以控制文件大小庸汗。
dd if=/dev/zero of=/mnt/swap bs=512 count=8388616
我的服務(wù)器內(nèi)存為4G,根據(jù)建議Swap大小設(shè)置為4G手报,創(chuàng)建過(guò)程有點(diǎn)慢蚯舱,需要耐心等待改化。
注意:創(chuàng)建swap大小為bs*count=4294971392(4G)
6.2 格式化swap文件
mkswap /mnt/swap
6.3 啟用swap文件(上文已提到)
- 臨時(shí)調(diào)整
sysctl -w vm.swappiness=60
- 永久調(diào)整,需要重啟服務(wù)器
vim /etc/sysctl.conf
vm.swappiness=60
# 加載配置
sysctl -p
6.4 激活使用這個(gè)swap文件
- 激活swap文件
swapon /mnt/swap
- 設(shè)置自動(dòng)掛載交換分區(qū)
echo "/mnt/swap swap swap defaults 0 0" >> /etc/fstab
6.5 查看交換分區(qū)狀態(tài)
swapon -s
free -m
可以看到枉昏,系統(tǒng)并沒(méi)有使用到我創(chuàng)建的交換空間陈肛,我的物理內(nèi)存還剩1G,后面跑下程序試試兄裂。
7 刪除交換分區(qū)
7.1 停止交換分區(qū)
swapoff /mnt/swapfile
7.2 刪除/etc/fstab中的自動(dòng)掛載
vim /etc/fstab
# 注釋或刪除掉
# /mnt/swapfile swap swap defaults 0 0
7.3 刪除分區(qū)文件
rm /mnt/swapfile
8 總結(jié)
swappiness的值為0~100句旱,我的CentOS 7設(shè)置為60,也就是內(nèi)存使用到40%就會(huì)使用交換分區(qū)晰奖。
如果業(yè)務(wù)谈撒、經(jīng)濟(jì)允許,還是使用物理內(nèi)存好匾南,畢竟內(nèi)存速度比磁盤(pán)快得多啃匿;同時(shí)交換分區(qū)如果經(jīng)常大量使用,會(huì)造加大系統(tǒng)io開(kāi)銷(xiāo)蛆楞,所以該升級(jí)內(nèi)存升級(jí)內(nèi)存溯乒,該調(diào)整參數(shù)調(diào)整參數(shù)。
另外有一種說(shuō)法豹爹,使用交換分區(qū)(Swap)會(huì)縮短硬盤(pán)使用壽命裆悄,這個(gè)沒(méi)驗(yàn)證過(guò),同時(shí)我是用的是云服務(wù)器帅戒,無(wú)所謂了灯帮。