1. 什么是swap分區(qū)
Swap分區(qū)在系統(tǒng)的物理內(nèi)存不夠用的時(shí)候,把物理內(nèi)存中的一部分空間釋放出來(lái),以供當(dāng)前運(yùn)行的程序使用。那些被釋放的空間可能來(lái)自一些很長(zhǎng)時(shí)間沒(méi)有什么操作的程序,這些被釋放的空間被臨時(shí)保存到Swap分區(qū)中,等到那些程序要運(yùn)行時(shí),再?gòu)腟wap分區(qū)中恢復(fù)保存的數(shù)據(jù)到內(nèi)存中。swap分區(qū)是從磁盤(pán)空間劃分而來(lái),有的是單獨(dú)使用一個(gè)分區(qū),有的是把一個(gè)大文件當(dāng)做swap。
2. 官方關(guān)于swap設(shè)置
Redhat6.4 官方推薦(我們使用CentOS 6.4)
推薦的系統(tǒng)交換空間
系統(tǒng)中的RAM數(shù)量 建議交換空間 如果允許休眠,建議使用交換空間
⩽2GB RAM的2倍 RAM數(shù)量的3倍
> 2GB - 8GB 等于RAM的數(shù)量 RAM的2倍
> 8GB - 64GB 至少4 GB RAM的1.5倍
> 64GB 至少4 GB 不建議休眠
因?yàn)橛行┫到y(tǒng)會(huì)允許休眠狀態(tài),如果不設(shè)置swap會(huì)無(wú)法啟動(dòng),就像windows系統(tǒng)使用休眠設(shè)置虛擬內(nèi)存一樣。
Mysql 5.6 和5.7的建議
mysql5.6
是說(shuō)在物理內(nèi)存足夠的情況下,可以刪除swap,因?yàn)橄到y(tǒng)在有些情況下會(huì)及時(shí)內(nèi)存夠用使用swap,若使用會(huì)因?yàn)镮/0變高導(dǎo)致mysql故障。Mysql建議刪除。
oracle建議
另外在其它博客中看到下面一個(gè)推薦設(shè)置,當(dāng)然我不清楚其怎么得到這個(gè)標(biāo)準(zhǔn)的。是否合理也無(wú)從考證??梢宰鳛橐粋€(gè)參考。
4G以?xún)?nèi)的物理內(nèi)存,SWAP 設(shè)置為內(nèi)存的2倍。
4-8G的物理內(nèi)存,SWAP 等于內(nèi)存大小。
8-64G 的物理內(nèi)存,SWAP 設(shè)置為8G。
64-256G物理內(nèi)存,SWAP 設(shè)置為16G。
當(dāng)然這么多建議標(biāo)準(zhǔn),很讓人無(wú)所適從,不知道該怎么設(shè)置。其實(shí)根據(jù)系統(tǒng)實(shí)際情況和內(nèi)存的負(fù)荷綜合考慮,但是實(shí)際情況又是什么樣呢?
個(gè)人建議從如下幾個(gè)考慮:
- 物理內(nèi)存空間是否在峰值也可以滿(mǎn)足要求,不滿(mǎn)足建議設(shè)置swap防止內(nèi)存溢出導(dǎo)致主機(jī)宕機(jī),當(dāng)然設(shè)置不宜過(guò)大,占用磁盤(pán)空間。
- 磁盤(pán)I/O是否足夠,使用磁盤(pán)I/O值過(guò)低或者其他業(yè)務(wù)要求高,不建議設(shè)置swap。由于使用swap需要頻繁寫(xiě)入磁盤(pán),使用固態(tài)磁盤(pán)不建議設(shè)置。
- 服務(wù)器安裝的具體的應(yīng)用,比如Mysql等不推薦設(shè)置,可以不設(shè)置或者修改參數(shù)swappiness來(lái)控制的,默認(rèn)值為 60意思是說(shuō)在內(nèi)存使用40%的情況下就使用swap空間,可以將值設(shè)置為10 或者設(shè)置0,優(yōu)先使用物理內(nèi)存。
3. 如何增加或者刪除swap分區(qū)
1、查看swap空間和使用情況
[root@localhost-zabbix ~]# swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 2097144 0 -1
[root@localhost-zabbix ~]# free -m
total used free shared buffers cached
Mem: 1877 565 1311 0 132 188
-/+ buffers/cache: 244 1632
Swap: 2047 0 2047
2、關(guān)閉swap
[root@localhost-zabbix ~]# swapoff /dev/dm-1
[root@localhost-zabbix ~]# swapon -s
Filename Type Size Used Priority
3、啟用之前關(guān)閉分區(qū)
[root@localhost-zabbix ~]# swapon /dev/dm-1
[root@localhost-zabbix ~]# swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 2097144 0 -1
4、縮小Swap分區(qū)
如果是增大Swap分區(qū)大小,那么就需要擴(kuò)展正在使用的swap分區(qū)的邏輯卷,此處使用lvreduce命令收縮邏輯卷
[root@getlnx14uat ~]# lvreduce -L 8G /dev/mapper/VolGroup00-LogVol01
WARNING: Reducing active logical volume to 8.00 GB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce LogVol01? [y/n]: y
Reducing logical volume LogVol01 to 8.00 GB
Logical volume LogVol01 successfully resized
[root@getlnx14uat ~]# mkswap /dev/mapper/VolGroup00-LogVol01 #格式化
Setting up swapspace version 1, size = 8589930 kB
[root@getlnx14uat ~]# swapon -s
Filename Type Size Used Priority
[root@getlnx14uat ~]# swapon /dev/mapper/VolGroup00-LogVol01
[root@getlnx14uat ~]# swapon -s
Filename Type Size Used Priority
/dev/mapper/VolGroup00-LogVol01 partition 8388600 0 -1
5、增大swap空間
如果磁盤(pán)還有剩余未分配空間可以新分區(qū)swap或者增大之前的swap
如果沒(méi)有磁盤(pán)未分配,可以新建分區(qū)文件,來(lái)增大swap
[root@localhost-zabbix ~]# dd if=/dev/zero of=/home/swap bs=1024 count=1024000
記錄了1024000+0 的讀入
記錄了1024000+0 的寫(xiě)出
1048576000字節(jié)(1.0 GB)已復(fù)制,2.69212 秒,389 MB/秒
[root@localhost-zabbix ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_localhostzabbix-lv_root 18G 4.7G 12G 29% /
tmpfs 939M 0 939M 0% /dev/shm
/dev/sda1 485M 33M 427M 8% /boot
[root@localhost-zabbix ~]# mkswap /home/swap
mkswap: /home/swap: warning: don't erase bootbits sectors
on whole disk. Use -f to force.
Setting up swapspace version 1, size = 1023996 KiB
no label, UUID=74c16b0d-7d88-4384-b41e-b12cc93d4bbf
[root@localhost-zabbix ~]# cd /home/
[root@localhost-zabbix home]# ls
swap
[root@localhost-zabbix home]# mkswap swap
mkswap: swap: warning: don't erase bootbits sectors
on whole disk. Use -f to force.
Setting up swapspace version 1, size = 1023996 KiB
no label, UUID=7677912c-b337-4e83-9003-b736dec93d31
[root@localhost-zabbix home]# free -m
total used free shared buffers cached
Mem: 1877 1611 265 0 135 1192
-/+ buffers/cache: 283 1593
Swap: 2047 0 2047
[root@localhost-zabbix home]# swapon swap
[root@localhost-zabbix home]# free -m
total used free shared buffers cached
Mem: 1877 1612 265 0 135 1192
-/+ buffers/cache: 284 1592
Swap: 3047 0 3047
[root@localhost-zabbix home]# swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 2097144 0 -1
/home/swap file 1023992 0 -2
我們可以看到上面是有分區(qū)文件的方式增大了swap空間。但是這里還有個(gè)問(wèn)題就是重啟系統(tǒng)以后swap還是會(huì)變回去,這里需要修改/etc/fstab
增加:/home/swap swap swap default 0 0
刪除剛剛增加swap
swapoff /home/swap
rm -rf /home/swap
vi /etc/fstab
/home/swap swap swap default 0 0
是有新的分區(qū)新建swap:
使用fdisk來(lái)創(chuàng)建交換分區(qū)(假設(shè) /dev/sdb2 是創(chuàng)建的交換分區(qū))
mkswap /dev/sdb2
swapon /dev/sdb2
vi /etc/fstab
/dev/sdb2 swap swap defaults 0 0
6、修改swappiness
swappiness參數(shù)值說(shuō)明
vm.swappiness = 0 僅在內(nèi)存不足的情況下--當(dāng)剩余空閑內(nèi)存低于vm.min_free_kbytes limit時(shí),使用交換空間。
vm.swappiness = 1 內(nèi)核版本3.5及以上、Red Hat內(nèi)核版本2.6.32-303及以上,進(jìn)行最少量的交換,而不禁用交換。
vm.swappiness = 10當(dāng)系統(tǒng)存在足夠內(nèi)存時(shí),推薦設(shè)置為該值以提高性能。
vm.swappiness = 60默認(rèn)值
vm.swappiness = 100 內(nèi)核將積極的使用交換空間
# sysctl -a | grep vm.swappiness 查看swappiness
vm.swappiness = 30
# echo 10 > /proc/sys/vm/swappiness 臨時(shí)修改
# sysctl -a | grep vm.swappiness
# vm.swappiness = 10
# sysctl -w vm.swappiness=10 臨時(shí)修改
vm.swappiness = 10
# cat /proc/sys/vm/swappiness
10
在/etc/sysctl.conf中編輯,增加如下參數(shù)(如果存在的話(huà))
vm.swappiness = 10 永久修改 需要重啟
特別注意:
在不影響業(yè)務(wù)和系統(tǒng),物理內(nèi)存足夠情況下,優(yōu)先建議使用最后一種修改swappiness這樣可以保證在優(yōu)先使用物理內(nèi)存而在物理內(nèi)存不足的情況下使用swap防止內(nèi)存溢出。根據(jù)查詢(xún)資料建議設(shè)置值10
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。