1)swap不能代替物理內存使用。
2)swap在非高內存主機上必不可少。
關于swap的知識點比較繞,如果看不懂請多看幾遍。
swap空間上的數據,是存儲在硬盤上的。
所以很多人常常以性能問題,提出禁用swap的觀點。因為在硬盤上讀取數據的性能通常并不是很好。
但是請注意,正常的情況下,swap空間上存儲的是系統不會頻繁使用的數據,調用的次數非常少,性能問題幾乎可以忽略。
什么是正常的情況?正常的情況就是物理內存還夠使用。
如果物理內存不夠用了呢?上面提到物理內存夠用的時候只把不常使用的數據放到swap,那么,如果物理內存不夠用了,系統會把物理內存放不下的數據盡量swap里放,因為它不得不這樣做,這樣一來就會造成系統頻繁的操作swap數據。
還有另外一點再解釋下,CPU可以讀取內存上的數據,但是硬盤上的數據(也就是這里講的swap ),需要先讀入內存,然后才能交給CPU處理。
可能有很多人都明白,硬盤數據到內存的速度,要比內存的數據到CPU的速度,可能要慢上幾百幾千倍。
提供一個具體實例來解讀一下

1)如果沒有swap:
swap用了511M,空閑的物理內存是324M,也就是說,如果沒有swap,內存已經爆了。
2)swap并沒有影響到性能:
如前面所說,這個時候系統還有足夠的物理內存(351M),換句話說,現在swap里存儲的還是不常使用的數據(也就是swap正在發揮正常的作用)。
3)如果一定不要用swap:
正常的情況,swap是不常使用的數據,但是不常使用,它畢竟還是要使用,還是要從硬盤讀取到內存,對于不差錢的土豪,完全可以花錢加內存,然后把swap去掉,只是這樣做的性價比非常非常非常非常非常低。
再強調一下:swap不能代替物理內存用!
已經重復了多次,swap正常的情況下只存放不常用的數據,如果物理內存不夠用了,那么常用和不常用的數據都會放進swap,這樣會導致系統頻繁的從硬盤讀數據,再往硬盤寫數據,把硬盤IO卡成翔。
所以不要覺得內存不夠用了,多加些swap就可以了,不是這么回事。
什么樣的主機可以不用swap?
從我自己的使用經驗來看,swap通常最多只會占用到幾百M,沒有見到超過1G的。
那么要考慮的問題就是:對于有多少物理內存的主機,這幾百M到1G的內存是可有可無的,可以忽略的。
我個人覺得,至少是8G起,如果內存還不到8G,比如只有1G、2G,甚至512M,swap還是加上好。前段時間處理過二臺土豪機,64G的物理內存,這些內存根本用不完,當然就不再需要swap了。
swap并不是越多越好
很早很早很早的文章會提到,swap通常設置為物理內存的2倍,但是現在年代不一樣了,添加太多了根本用不到。
個人建議:2G和2G以下的,設置成和物理內存相同容量swap,2G以上的,設置為2G。
8G以上的機器可以不再設置swap,但是要自己設置好MYSQL緩存,PHP的memory_limit,處理PHP的進程數量(Apache或者php-fpm),把這些協調好,不要讓內存在訪問高峰爆掉。
可能有人會說了,我沒swap,一樣用的好好的。
對于訪問量非常低的主機,這當然不會有問題,沒什么好解釋的。
關于訪問量:
既然上面提到訪問量了,那么再多說下。
經常有人說,我網站一天就幾十個IP,怎么也掛了?
要知道,“訪問”你網站的,不只是瀏覽器,更多的是搜索引擎的蜘蛛,比如阿里巴巴旗下的垃圾蜘蛛“一搜”(已改名為神馬),這些垃圾蜘蛛甚至會并發抓取,這樣搞下來,對于服務器,和被攻擊的效果是一樣的,對于靜態網站,影響不會很大,但是對于wordpress這種負載能力渣的不行的程序,影響可就太大了。
而蜘蛛的抓取,在流量統計(如51LA,CNZZ)里是統計不到的。所以這種情況就不要拿統計來說事了。
最后總結下:
聽哥的話,小內存的機器,把swap加上,只有好處,沒有壞處。