天天看點

Linux中的SWAP交換分區

        大多數 Linux 在系統安裝時都會提醒并建議你劃分一個 SWAP 交換分區,如果你是從 Windows 切換到 Linux 的新使用者,興許對這個 SWAP 會感到十分疑惑。

        SWAP 交換分區到底是幹什麼用的呢?我們是否真的需要劃一個 SWAP 分區呢?答案是:視情況而定!SWAP 分區在一些情況下可以提升 Linux 作業系統性能,但在某些情況下又會成為系統運作的瓶頸,下面我們就來詳細介紹下 Linux 中的 SWAP 交換分區。

  • 存放記憶體溢出來的資料

        簡單來說,SWAP 交換分區是用來存放記憶體溢出來的資料。我們可以将記憶體想像成一個盆子,運作程式時的資料都被作為水放在記憶體這個盆子當中。如果你運作太多的應用程式,導緻水過多而(記憶體這個)盆子已經裝不下時,就會将多于部分的水裝到 SWAP 交換分區當中。

        從理論上講,SWAP 交換分區增大了可以使用的記憶體空間,但事實并非如此。因為記憶體的資料交換速度是非常快的,而 SWAP 交換分區是把實體磁盤當成記憶體的載體,也就是說:雖然使用 SWAP 可以讓我們運作更多或更大的應用程式了,但實體磁盤的資料交換速度遠比不上實體記憶體,是以也就可能造成運作性能的下降。而對硬碟特别是 SSD 磁盤的頻繁讀寫,也會造成磁盤壽命的縮短和性能下降。

        其實,我們可以把 SWAP 交換分區比喻成 Windows 中的 pagefile 頁面檔案,但兩者在技術實作上仍有許多差異。

  • SWAP優先級

        SWAP 交換分區會将記憶體中較少使用的資料移到磁盤當中,進而将更多的記憶體空間騰出來給其它的重要應用,也就是說:記憶體中較少使用的資料會被移動 SWAP 分區。

        “較少使用”其實取決于“swappiness”門檻值,在 Linux 中其實是一個可配置項。較高在 swappiness 值意味着資料更有可能被移到 SWAP 分區,較低的 swappiness 表示資料不太可能被移到 SWAP 分區。

  • SWAP與Linux休眠

        最後還有一點需要注意:Linux 系統休眠的資料是存儲到 SWAP 交換分區中的,也就是說如果系統沒有配置 SWAP 交換分區,在 Linux 上是無法進行休眠的。

  • 你是否需要SWAP分區呢?

        你有必要為自己的 Linux 劃一個 SWAP 分區嗎?SWAP 交換分區對你來說是必要的嗎?絕對不是!Linux 系統不配置 SWAP 也可以運作得很好,是否需要劃分 SWAP 分區也有如下幾個優缺點:

優點:

  • 記憶體用完時,提供更多運作空間
  • 可以休眠

缺點:

  • SWAP對磁盤的占用設定好之後是固定的,無法動态調整
  • 增加了磁盤的讀寫次數和損耗幾率
  • 不一定提高性能(詳細解釋見下文)
  • SWAP起反作用的情況

        開啟 SWAP 交換分區也并非問題能提升 Linux 性能,在某些情況下使用 SWAP 可能比不使用更糟。

        如果你在一台1GB記憶體和5400轉硬碟的上網本上安裝了 Linux,隻需要多打開幾個浏覽器标簽并多開幾個應用就會造成記憶體占完而開始使用 SWAP 交換分區。由于硬碟隻有5400轉,随後便開始出現性能瓶頸。這是因為硬碟轉速太慢,而又有大量的資料需要通路到 SWAP 交換分區,是以會造成機器越來越慢。在此時,我們通常需要重新開機系統來完全清除 SWAP 的内容。

  • 關于SWAP的建議
  1. 如果你需要 Linux 休眠功能,那麼當然就要劃分 SWAP 分區。該分區一般為你記憶體大小外加 10-25%
  2. 如果你的記憶體小于4GB,并且希望得到小的性能提升(至少7200轉磁盤),可以劃分一個交換分區
  3. 如果你的磁盤轉速小于7200轉,建議不要劃分 SWAP 交換分區
  • 更改Swappiness

        我們可以直接在 /etc/sysctl.conf 檔案中對 swappiness 值進行編輯,在該檔案中找到 vm.swappiness 并對其值進行更改(最好是10),如果你沒找到這個參數,可以直接在檔案末尾添加:

vm.swappiness=10      
Linux中的SWAP交換分區

繼續閱讀