1 簡介
Swap分區在系統的物理內存不夠用的時候,把物理內存中的一部分空間釋放出來,以供當前運行的程序使用。那些被釋放的空間可能來自一些很長時間沒有什么操作的程序,這些被釋放的空間被臨時保存到Swap分區中,等到那些程序要運行時,再從Swap分區中恢復保存的數據到內存中。
1.1 Linux的swap原理
1、 控制swap使用的系統參數:swappiness
Swappiness:表示使用物理內存限度
Swappiness為0(100%-0=100%)表示物理內存使用到100%的時候使用swap空間
Swappiness為60(100%-60%=40%)表示物理內存使用到40%的時候使用swap空間
如果swappiness設置太大(內存的速度會比磁盤快很多),這樣子會加大系統io,同時造的成大量頁的換進換出,嚴重影響系統的性能,所以我們在操作系統層面,要盡可能使用內存,對該參數進行調整。
2、 Linux默認swappiness
# cat /proc/sys/vm/swappiness
60
默認為60,也就是說當物理內存使用到40%的時候開始使用swap。
2 解決
2.1 調整swappiness參數
2.1.1 臨時調整
# sysctl vm.swappiness=10
vm.swappiness = 10
# cat /proc/sys/vm/swappiness
10
2.1.2 久調整
1、設置
# cat /etc/sysctl.conf
vm.swappiness=10
2、激活
#sysctl -p
2.2 增加swap空間
當以上方法無法解決問題,或者機器內存消耗大,添加內存,swap也要相應擴展。
1、 查看swap****空間
# free -m
total used free shared buff/cache available
Mem: 3791 1464 1112 30 1214 1998
Swap: 4095 175 3920
2、 查看/dev/zero
# df -h /dev/zero
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.9G 0 1.9G 0% /dev
此/dev/zero一共就1.9G所以添加swap空間不可以超過1.9G
解釋:/dev/zero也是一個偽文件,但它實際上產生連續不斷的null的流(二進制的零流,而不是ASCII型的)。寫入它的輸出會丟失不見,/dev/zero主要的用處是用來創建一個指定長度用于初始化的空文件,像臨時交換文件。可以用來創建swap。
3、 新建swap****分區空間
注意:創建好的交換文件不能刪除,所以要提前找到一個目錄。
# cd /home/
# mkdir -p swap
# cd /home/swap/
# dd if=/dev/zero of=swapfile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 1.0867 s, 988 MB/s
解釋:of為文件名。Bs為單個大小。Count為數量。我創建了一個1G的文件。
4、 mkswap****創建交換文件
# mkswap swapfile
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=18c17ff6-a584-4e74-8fba-ab0a39ae90e4
5、 swapon****激活
# swapon swapfile
swapon: /home/swap/swapfile: insecure permissions 0644, 0600 suggested.
6、 驗證
# free -m
total used free shared buff/cache available
Mem: 3791 1464 121 30 2205 1989
Swap: 5119 175 4944
7、 開機啟動
由于以上操作為臨時生效,服務器重啟會失效。所以要設置開機啟動。
#vi /etc/fstab
/home/swap/swapfile swap swapdefaults 0 0
8、 其他操作
a) 停用:swapoff swapfile
b) 刪除:rm –rf swapfile
c) 刪除隨即啟動swap:vi /etc/fstab