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 保存即可

