Linux系統的swap分區

什麼是swap分區

Swap分區在系統的物理內存不夠用的時候,把物理內存中的一部分空間釋放出來,以供當前運行的程序使用。那些被釋放的空間可能來自一些很長時間沒有什麼操做的程序,這些被釋放的空間被臨時保存到Swap分區中,等到那些程序要運行時,再從Swap分區中恢復保存的數據到內存中。swap分區是從磁盤空間劃分而來,有的是單獨使用一個分區,有的是把一個大文件當作swap。mysql

官方關於swap設置

Redhat6.4 官方推薦(咱們使用CentOS 6.4)
推薦的系統交換空間sql

系統中的RAM數量   建議交換空間      若是容許休眠,建議使用交換空間
⩽2GB                RAM的2倍               RAM數量的3倍
> 2GB - 8GB      等於RAM的數量              RAM的2倍
> 8GB - 64GB        至少4 GB               RAM的1.5倍
> 64GB              至少4 GB               不建議休眠

由於有些系統會容許休眠狀態,若是不設置swap會沒法啓動,就像windows系統使用休眠設置虛擬內存同樣。windows

Mysql 5.6 和5.7的建議服務器

圖片描述

是說在物理內存足夠的狀況下,能夠刪除swap,由於系統在有些狀況下會及時內存夠用使用swap,若使用會由於I/0變高致使mysql故障。Mysql建議刪除。app

圖片描述

另外在其它博客中看到下面一個推薦設置,固然我不清楚其怎麼獲得這個標準的。是否合理也無從考證。能夠做爲一個參考。性能

4G之內的物理內存,SWAP 設置爲內存的2倍。
4-8G的物理內存,SWAP 等於內存大小。
8-64G 的物理內存,SWAP設置爲8G。
64-256G物理內存,SWAP 設置爲16G。

固然這麼多建議標準,很讓人無所適從,不知道該怎麼設置。其實根據系統實際狀況和內存的負荷綜合考慮,可是實際狀況又是什麼樣呢?spa

我的建議從以下幾個考慮:3d

  1. 物理內存空間是否在峯值也能夠知足要求,不知足建議設置swap防止內存溢出致使主機宕機,固然設置不宜過大,佔用磁盤空間。
  2. 磁盤I/O是否足夠,使用磁盤I/O值太低或者其餘業務要求高,不建議設置swap。因爲使用swap須要頻繁寫入磁盤,使用固態磁盤不建議設置。
  3. 服務器安裝的具體的應用,好比Mysql等不推薦設置,能夠不設置或者修改參數swappiness來控制的,默認值爲
    60意思是說在內存使用40%的狀況下就使用swap空間,能夠將值設置爲10 或者設置0,優先使用物理內存。

如何增長或者刪除swap分區

查看swap空間和使用狀況code

[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

關閉swapblog

[root@localhost-zabbix ~]# swapoff /dev/dm-1
[root@localhost-zabbix ~]# swapon -s
Filename        Type        Size    Used    Priority

啓用以前關閉分區

[root@localhost-zabbix ~]# swapon /dev/dm-1
[root@localhost-zabbix ~]# swapon -s
Filename                Type        Size    Used    Priority
/dev/dm-1                               partition   2097144 0   -1

縮小Swap分區
若是是增大Swap分區大小,那麼就須要擴展正在使用的swap分區的邏輯卷,此處使用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

增大swap空間
若是磁盤還有剩餘未分配空間能夠新分區swap或者增大以前的swap
若是沒有磁盤未分配,能夠新建分區文件,來增大swap

[root@localhost-zabbix ~]# dd if=/dev/zero of=/home/swap bs=1024 count=1024000
記錄了1024000+0 的讀入
記錄了1024000+0 的寫出
1048576000字節(1.0 GB)已複製,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

咱們能夠看到上面是有分區文件的方式增大了swap空間。可是這裏還有個問題就是重啓系統之後swap仍是會變回去,這裏須要修改/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

是有新的分區新建swap:
使用fdisk來建立交換分區(假設 /dev/sdb2 是建立的交換分區)

mkswap /dev/sdb2
swapon /dev/sdb2
vi /etc/fstab
/dev/sdb2 swap swap defaults 0 0

修改swappiness

swappiness參數值說明
vm.swappiness = 0  僅在內存不足的狀況下--當剩餘空閒內存低於vm.min_free_kbytes limit時,使用交換空間。 
vm.swappiness = 1  內核版本3.5及以上、Red Hat內核版本2.6.32-303及以上,進行最少許的交換,而不由用交換。 
vm.swappiness = 10當系統存在足夠內存時,推薦設置爲該值以提升性能。 
vm.swappiness = 60默認值
vm.swappiness = 100    內核將積極的使用交換空間
# sysctl -a | grep vm.swappiness 查看swappiness
vm.swappiness = 30
# echo 10 > /proc/sys/vm/swappiness 臨時修改
# sysctl -a | grep vm.swappiness
# vm.swappiness = 10
# sysctl -w vm.swappiness=10 臨時修改
vm.swappiness = 10
# cat /proc/sys/vm/swappiness
10
在/etc/sysctl.conf中編輯,增長以下參數(若是存在的話)
vm.swappiness = 10 永久修改 須要重啓

特別注意:在不影響業務和系統,物理內存足夠狀況下,優先建議使用最後一種修改swappiness這樣能夠保證在優先使用物理內存而在物理內存不足的狀況下使用swap防止內存溢出。根據查詢資料建議設置值10

相關文章
相關標籤/搜索