Linux下swap到底有沒有必要使用

週五看到QQ羣裏在討論Linux主機上到底需不需要開啓swap空間,而且目前公有云主機默認都是把swap關了的,很多公司也是沒有開啓swap,那到底需不需要開啓呢?


我之前在看《鳥哥的Linux私房菜》上他寫了這麼一段話:swap在目前的桌面計算機來講,存在的意義已經不大了,這是因爲目前的X86主機所含的內存實在都太大了,所以我們的系統大概率用不到swap,不過,如果針對服務器或者工作站這些常年上線的系統來說,swap還是需要的。


當然,這段話是《鳥哥的Linux私房菜》第三版裏寫的(在第四版不知道還是不是這麼寫的),那時候的內存還遠遠沒有現在大,那現在到底需不需要呢?我們先來看看什麼是swap,它的作用是什麼。

什麼是swap

swap是磁盤上的一個區域,可以是一個分區,也可以是一個文件,或者是它們的組合,簡單點說,當系統物理內存不夠時,Linux會將內存中不常訪問的數據保存到swap上,這樣系統就有更多的物理內存爲各個進程服務,而當系統需要訪問swap上存儲的內容時,再將swap上的數據加載到內存中,這就是我們常說的swap out和swap in。

swap的主要功能

其實上面基本已經將swap的主要功能說了,這裏再來重述一下:
(1)、當物理內存不足的時候,將某些在內存中所佔用的程序暫時移動到swap當中,讓物理內存可以被需要的程序來使用;
(2)、Linux會將內存中不常訪問的數據保存到swap中,當系統需要再次調用的時候,就把它從swap加載到內存;
(3)、如果你的主機支持電源管理模式,也就是說,你的Linux主機系統可以進入"休眠"模式的話,那麼,運行當中的程序狀態則會被記錄到swap中去,以作爲"喚醒"主機狀態的依據;
(4)、在某些程序運行時,本來就會利用swap特性來存放一些數據,比如在裝Oracle11g的時候會檢查swap size;

swap給我們帶來什麼好處

上面介紹了swap的主要功能,其實就是swap的優點。在說swap給我們帶來好處之前先說說swap的缺點。由於swap是磁盤上的一個區域,要麼是文件,要麼是分區,甚至它們的組合,其實都逃不脫"在磁盤上",那麼很明顯的一個缺點就是速度,磁盤的速度和內存的速度不是一個量級的,就算現在的SSD磁盤,還是跟不上內存的速度,所以說如果不停的讀寫swap,對磁盤的性能是有很大的影響的,尤其是在物理內存喫緊,swap讀寫頻率又高的極端情況下,這時候除了加物理內存別無他法了。

有的小夥伴看到這裏可能在想,哇,我還用它幹啥,我直接把我內存加夠不就行了。騷年莫急,我將慢慢道來。
來看看下面這些情況:
(1)、有些應用程序在啓動的時候會需要大量內存,但是在啓動完成後需要的內存很小,這時候swap就很是時候了,假如全部用物理內存,其實就有點浪費資源了,誰的錢不是錢呢?你說是吧。
(2)、現在很多小夥伴開發都用Ubuntu,Ubuntu有休眠的功能,如果需要用到休眠的話,也是需要swap的,它會把休眠之前內存中的數據保存到swap中,你下次用的時候,就直接從swap加載到內存中,省的麻煩。
(3)、有些小公司講究節約成本,甚至有的把這個當成kpi了,所以就不能把內存搞得蠻大了,我們就需要在保證系統正常運行所需內存的情況下,配備swap,既可以保證業務運行,也可以防患於未然。
(4)、現在大部分物理內存都夠用了,很多公司也完全放棄了swap。但是誰也不知道下一秒會發生什麼問題,比如內存泄漏,比如某個進程需要內存超過預期,這時候如果只有物理內存,可能就會直接OOM了,等不到我們收到報警,進行處理。如果這時候有swap,我們收到物理內存不夠報警的時候還會有swap頂一下,回滾或者加內存什麼的也有足夠的時間,避免手忙腳亂髮生生產事故。

當然還有很多情況,這裏就不例舉了。從上面其實可以看出,swap有它的好處,也有它的缺點,具體用不用是根據每個公司具體情況來定的,不是說不用,也不是說一定要用(當然,有的軟件是一定要用的)。就像今天上午在微信羣裏和一爲小夥伴討論要不要秒級報警一樣,每個公司有每個公司的打法,在討論問題的時候切莫以自己公司的就是標準,我一直認爲互聯網時代沒有唯一的標準,只有不斷探索,不斷追求,當然,大部分公司基本都是採用"前車之鑑"這種模式,比如效仿BAT公司成熟方案,學習各大高科技公司的落地實施等。

說了這麼多,其實也就幾句話:swap空間到底用不用,取決於應用軟件需不需要,取決於公司的規範標準,還卻決於作爲運維人員自己的考慮,更多情況下還卻決於現實(你的公司舍不捨得花錢)。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章