1、簡介 如果你的伺服器的總是報告記憶體不足,並且時常因為記憶體不足而引發服務被強制kill的話,在不增加物理記憶體的情況下,啟用swap交換區作為虛擬記憶體是一個不錯的選擇。 為了測試一些功能我在阿裡雲購買了1核1G的ECS伺服器幾台(最便宜的了,再貴捨不得啊),一臺伺服器就安裝了LANMP,redis, ...
1、簡介
如果你的伺服器的總是報告記憶體不足,並且時常因為記憶體不足而引發服務被強制kill的話,在不增加物理記憶體的情況下,啟用swap交換區作為虛擬記憶體是一個不錯的選擇。
為了測試一些功能我在阿裡雲購買了1核1G的ECS伺服器幾台(最便宜的了,再貴捨不得啊),一臺伺服器就安裝了LANMP,redis,memcache,elk等等耗記憶體較大的軟體,記憶體各種不夠用啊,這時候虛擬記憶體就派上用場了。
虛擬記憶體一般設置為物理記憶體的2倍即可,多了也是浪費硬碟。
2、新增swap分區
由於伺服器已經安裝了各種軟體,懶得重新給硬碟分區,所以這裡使用文件作為swap分區 ,下麵操作需要在root用戶下操作
使用 free -h 查看當前記憶體占用情況,可以看到物理記憶體所剩無幾,下麵的swap也是使用的文件作為虛擬記憶體使用的
創建要作為swap分區的文件:增加1GB大小的交換分區,則命令寫法如下,其中的count等於想要的塊的數量(bs*count=文件大小),如下麵是2G
# dd if=/dev/zero of=/root/swapfile2 bs=1M count=2048
這裡我使用的of為/root/swapfile2 ,可以看到該文件是新創建的,這時候這個文件還不能直接使用為swap文件
修改文件許可權,如不修改,在啟用swap文件的時候會提示下麵信息(不影響使用,建議修改)
# chmod 0600 /root/swapfile2
格式化為交換分區文件,建立swap的文件系統,/root/swapfile2需要與上面的of的值一致,這個目錄可以自定義
# mkswap /root/swapfile2
啟用swap文件:
# swapon /root/swapfile2
可以看到未啟用時虛擬記憶體為2G,啟用後記憶體增加了2G
使系統開機時自啟用
# vim /etc/fstab
在文件/etc/fstab中添加一行
/root/swapfile2 swap swap defaults 0 0
3、調整swap空間使用的優先順序
如果記憶體夠大,應當告訴 linux 不必太多的使用 SWAP 分區, 可以通過修改 swappiness 的數值。
swappiness=0的時候表示最大限度使用物理記憶體,然後才是 swap空間,swappiness=100的時候表示積極的使用swap分區,並且把記憶體上的數據及時的搬運到swap空間裡面。
各個操作系統的優先順序可能都不一樣,如果不調整,你會發現添加的虛擬記憶體幾乎沒有用到
查看當前swappiness值
# cat /proc/sys/vm/swappiness
修改swappiness值為60(臨時修改,重啟後即還原為預設值)
# sudo sysctl vm.swappiness=60
永久修改swappiness預設值(重啟生效)
# vim /etc/sysctl.conf
找到vm.swappiness ,如果沒有則需要手動添加一行 vm.swappiness = 60 保存即可