跳轉到內容

Linux 添加與修改 Swap 虛擬內存指南

在便宜的雲廠商(如著名的各種“靈車”廠商)處購買的 VPS,內存經常只有 512MB 甚至更小。當咱們運行一點稍微複雜的應用環境(如安裝了 Docker、1Panel 或是跑個稍微耗點資源的後端服務)時,經常會遇到整個系統突然死掉、或者程序莫名其妙被系統強制殺死 (OOM-Kill) 的情況。

為了解決這個問題,添加並開啟 Swap 是一項必備技能操作。

什麼是 Swap?有什麼用?

Swap(交換空間) 其實就相當於 Windows 系統裡的“虛擬內存”。 當你的物理內存(RAM)即將被耗盡不夠用時,Linux 內核就會借用硬盤上的部分空間當作內存來湊合用,把那些很久沒被訪問的內存數據暫且移動到硬盤裡,以此騰出真實的物理內存來運行眼前的急需任務。

雖然硬盤的速度遠不如內存快,但這好歹“不至於讓程序直接崩潰退出”


一鍵腳本(懶人最愛)

如果你不想敲過多代碼,著名的開源腳本其實能完美處理。這裡提供甬哥的一鍵添加/刪除 Swap 腳本:

bash
wget -O swap.sh https://raw.githubusercontent.com/yqs12/swap/main/swap.sh && bash swap.sh

運行後會根據菜單提示,輸入你想添加的大小數字(比如添加 1024 代表添加 1GB 或者添加 2048 代表 2GB)即可。

如果你有安全潔癖喜歡純手動掌控的過程,請往下看咱們極簡的手動教程。


純手工添加 Swap 文件教程(5個步驟)

下面以添加一個大小為 2GB 的 Swap 交換文件為例。全過程需要 root 權限去執行。

1. 檢查當前是否已有 Swap

bash
free -h

看輸出的 Swap: 這一行。如果後面顯示的都是 0B 或者 0,說明咱們現在還沒有 Swap。繼續往下走。

2. 創建一個物理文件用作 Swap

使用 fallocate 命令會在根目錄 / 下快速創建一個 2G 大小的名為 swapfile 的空白文件。

bash
fallocate -l 2G /swapfile

注:如果你需要 1GB,把 2G 改成 1G 即可。

3. 設置嚴格的安全權限並格式化該文件

不設置好權限,系統會報錯不讓你掛載(因為這事關係統內存的安全)。

bash
chmod 600 /swapfile
mkswap /swapfile

終端會提示類似 Setting up swapspace version 1

4. 激活當前這個 Swap 文件

bash
swapon /swapfile

此時再運行一次 free -h,你看 Swap: 這一行是不是已經顯示大概 2.0G 了?說明這部分虛擬內存拿下了!

5. 設為開機自啟(永久生效)

上面的動作只要一重啟 VPS 就會失效。接下來我們需要把它寫入系統的設備掛載表 /etc/fstab 裡,讓它下次開機時自動被掛載上。

執行這行追加命令:

bash
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

如何優化 Swap 的使用率 (Swappiness)?

默認情況下,一旦內存稍微吃緊,Linux 會比較積極地去使用 Swap。不過既然有物理內存,咱們肯定更喜歡優先用內存(畢竟速度快)。我們可以通過修改一個叫 swappiness 的內核參數來讓內核不到迫不得已不要去碰 Swap。

swappiness 的值從 0 到 100:

  • 值接近 0:告訴系統儘可能用物理內存,不到萬不得已別碰 Swap。
  • 值接近 100:告訴系統早點把數據往硬盤(Swap)裡丟。

對大多數服務器來說,咱們把這個值設為 10 是極其推薦的。

修改步驟:

  1. 打開系統控制配置表
    bash
    nano /etc/sysctl.conf
  2. 在該文件的在最末尾換行並添加:
    text
    vm.swappiness=10
  3. Ctrl + X,再按 Y,然後回車保存退出。
  4. 應用生效:
    bash
    sysctl -p

從此你的小雞再也不會輕易死機崩潰了!


免责声明

本文仅供技术交流和学习参考,请遵守当地法律法规,合理合法使用网络服务。

最後更新於: