ESC

開始輸入,可搜尋發票、服務、域名、工單,以及 更多...

搜尋... Ctrl+K
Linux 伺服器

Linux 新增 Swap 虛擬記憶體教程:建立 swap 檔案與調整 swappiness

6 個步驟 5 分鐘閱讀 14 次閱讀 0
本文目錄

記憶體較小的 VPS 在編譯軟體、執行資料庫或流量突增時,容易因記憶體耗盡觸發 OOM,導致 MySQL 等程序被系統強制結束。Linux 新增 Swap 虛擬記憶體可以在實體記憶體不足時把不常用的資料暫存到磁碟,作為一道安全緩衝。本文介紹如何建立 swap 檔案、開機自動啟用以及調整 swappiness,適用於 Debian/Ubuntu 與 CentOS/Rocky/AlmaLinux 的 KVM VPS 和獨立伺服器。

Swap 讀寫速度遠低於記憶體,只能作為應急緩衝,不能替代真正的記憶體。如果長期大量使用 swap,建議升級伺服器記憶體配置。

步驟 1:檢視當前記憶體與 Swap 使用情況

先用 free -h 檢視記憶體和現有 swap,用 swapon --show 確認是否已啟用 swap,再用 df -h 確認根分割槽有足夠的剩餘空間。下表是常見的 swap 大小參考:

實體記憶體建議 Swap 大小
1 GB 及以下1–2 GB
2–4 GB2 GB
8 GB 及以上2–4 GB(或按需)
free -h
swapon --show
df -h /

步驟 2:使用 fallocate 建立 Swap 檔案

fallocate 可以瞬間分配指定大小的檔案,速度最快。如果提示不支援(部分舊版檔案系統),改用 dd 逐塊寫入,耗時稍長但相容性最好。下文以 2 GB 的 /swapfile 為例。

# Create a 2 GB swap file
fallocate -l 2G /swapfile

# If fallocate fails ("Operation not supported"), use dd instead
dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress

步驟 3:設定許可權並啟用 Swap

swap 檔案中可能包含記憶體裡的敏感資料,必須設定為僅 root 可讀寫(600)。然後用 mkswap 格式化為 swap 格式,用 swapon 立即啟用,再次執行 free -h 應能看到 Swap 一行的容量。

chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
swapon --show
free -h

步驟 4:寫入 /etc/fstab 實現開機自動啟用

swapon 只對本次開機有效,需要在 fstab 中加入一行才能在重啟後自動掛載 swap。修改前先備份 fstab。

cp /etc/fstab /etc/fstab.bak
echo '/swapfile none swap sw 0 0' >> /etc/fstab

步驟 5:調整 swappiness 最佳化 Swap 使用策略

swappiness 取值 0–100,表示核心使用 swap 的積極程度。伺服器場景通常希望優先使用實體記憶體,只在必要時才用 swap,建議設定為 10 左右。通過 /etc/sysctl.d/ 寫入配置檔案可以永久生效。

cat /proc/sys/vm/swappiness      # usually 60 (Debian/Ubuntu) or 30 (some RHEL images)
sysctl vm.swappiness=10          # apply now

# Make it permanent
echo 'vm.swappiness=10' > /etc/sysctl.d/99-swappiness.conf
sysctl --system

步驟 6:如何刪除 Swap 檔案

如果不再需要 swap 或想調整大小,先停用並從 fstab 中刪除對應行,再刪除檔案。調整大小時重新執行步驟 2–4 即可。

swapoff /swapfile
sed -i '\|^/swapfile |d' /etc/fstab
rm -f /swapfile
free -h

常見問題

執行 swapon 時提示“Invalid argument”或“Operation not permitted”?

“Invalid argument”多見於 fallocate 在不支援的檔案系統上建立的檔案,改用 dd 重新建立即可。“Operation not permitted”通常表示伺服器是容器型虛擬化,不允許自行新增 swap,此時請聯絡支援確認。

Swap 設定越大越好嗎?

不是。swap 過大並不會提升效能,反而佔用磁碟空間;當系統頻繁使用大量 swap 時,響應會明顯變慢。按上表設定即可,真正記憶體不足應升級配置。

如何檢視哪些程序在使用 Swap?

可以執行 grep VmSwap /proc/*/status | sort -k2 -n | tail 檢視佔用 swap 最多的程序,或安裝 htop 並顯示 SWAP 列。

如按以上步驟操作後仍無法解決,歡迎提交工單聯絡 IMIDC 7×24 技術支援。提交時請註明伺服器 IP、作業系統、已執行的命令和報錯截圖,工程師可以更快定位問題。

這篇文章有幫助嗎?

相關教程