幫助中心

伺服器、網路和帳戶的分步教程。

Linux 伺服器

Linux VPS 新增 Swap 交換空間教程(適合 512MB / 1GB 小記憶體套餐)

Linux VPS 新增 Swap 交換空間教程(適合 512MB / 1GB 小記憶體套餐)

在 512 MB 或 1 GB 的雲伺服器上,資料庫、PHP-FPM 加上一次軟體包更新,很容易在同一時間用光記憶體。這時核心的 OOM killer 會強制終止程序,最常被犧牲的就是 MySQL 或 MariaDB。在 Linux VPS 新增 Swap 交換空間,等於在硬碟上準備一塊溢位區,短暫的記憶體高峰不再讓服務崩潰。本文在 Debian、Ubuntu、CentOS、Rocky Linux 與 AlmaLinux 上建立 swap 檔案、設定開機自動掛載並調整 swappiness,同時說明小套餐在什麼情況下 swap 才真正有幫助。

步驟 1:檢查目前的記憶體與 Swap

先確認伺服器有多少 RAM 與 swap、硬碟還剩多少空間,以及核心是否已經因為記憶體不足而終止過程序。

free -h
swapon --show          # no output = no swap yet
df -h /                # make sure there is enough free disk space
# Has the kernel already killed processes for lack of memory?
journalctl -k | grep -i -E 'out of memory|killed process' 

如果 swapon --show 已經列出裝置或檔案,也許只需要調整引數(步驟 6),不必再新增一個。

步驟 2:決定合適的 Swap 大小

在 VPS 上,swap 是安全緩衝,不能取代 RAM。常見小套餐可參考下表:

套餐記憶體建議 Swap說明
512 MB1 GB強烈建議
1 GB1 GB - 2 GB有資料庫或控制面板時建議
2 GB1 GB作為安全緩衝
4 GB 以上1 GB - 2 GB 或不設僅作緊急緩衝

swap 檔案會佔用伺服器 SSD 空間,決定大小前請先確認步驟 1 的剩餘空間。

步驟 3:用 fallocate 或 dd 建立 Swap 檔案

fallocate 能瞬間預留空間;部分檔案系統不支援用它建立 swap,這時改用 dd 逐塊寫入,雖然較慢但一定可行。檔案許可權必須只有 root 可讀寫。

# Fast method (ext4, XFS)
fallocate -l 1G /swapfile

# If fallocate fails, or swapon later reports "file has holes", use dd instead
rm -f /swapfile
dd if=/dev/zero of=/swapfile bs=1M count=1024 status=progress

chmod 600 /swapfile
ls -lh /swapfile
Btrfs 上的 swap 檔案需要特別處理(停用寫時複製),請使用該檔案系統的專用方法。若是容器型虛擬化,swap 由宿主機控制,swapon 可能出現“Operation not permitted”。

步驟 4:格式化並啟用 Swap(mkswap 與 swapon)

mkswap 寫入 swap 標記,swapon 立即啟用,不需要重啟。

mkswap /swapfile
swapon /swapfile

swapon --show
free -h

步驟 5:寫入 /etc/fstab 讓 Swap 開機自動啟用

沒有 fstab 設定,重啟後 swap 就會消失。先備份檔案、加入一行,再關閉 swap 後用 swapon -a 重新啟用來測試——它讀取 fstab 的方式和開機流程相同。

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

# Test the fstab entry without rebooting
swapoff /swapfile
swapon -a
swapon --show

步驟 6:調整 VPS 的 swappiness

vm.swappiness 決定核心多積極地把記憶體頁搬到 swap。預設值 60 是為桌面環境設計的;伺服器設為 10,可讓常用資料留在 RAM,只有真正吃緊時才使用 swap。調低 vfs_cache_pressure 則能讓檔案系統後設資料快取保留久一點。

cat /proc/sys/vm/swappiness        # often 60 by default

# Apply now
sysctl vm.swappiness=10
sysctl vm.vfs_cache_pressure=50

# Keep after reboot
cat > /etc/sysctl.d/99-swap.conf <<'EOF'
vm.swappiness=10
vm.vfs_cache_pressure=50
EOF
sysctl --system

步驟 7:512 MB - 1 GB 套餐什麼時候適合用 Swap

swap 適合應付短暫高峰:執行 apt upgrade 或 dnf update、編譯軟體、Composer 或 npm 安裝、夜間備份,或資料庫短時間需要更多緩衝。若工作負載長期需要比套餐更多的記憶體,swap 就無法解決。請檢查系統是否持續在使用 swap:

# Watch the si (swap in) and so (swap out) columns for 10 seconds
vmstat 1 10

si、so 偶爾不是 0 沒有關係;若長時間數值都很高,代表伺服器在頻繁換頁,整體會變得非常慢。這時請降低記憶體用量(減少 PHP-FPM worker、縮小資料庫緩衝),或把 VPS 升級到記憶體更大的套餐——JUSTG 雲伺服器可在客戶中心的服務詳情頁升級套餐。

步驟 8:調整大小或移除 Swap 檔案

# Resize to 2 GB or remove swap
swapoff /swapfile
rm -f /swapfile
# To remove completely, also delete the fstab line:
sed -i '\|^/swapfile |d' /etc/fstab
# To resize, repeat Step 3 and Step 4 with the new size (fstab line stays)

常見問題

Swap 會讓 SSD 壽命變短嗎?

swappiness 設為 10、只在高峰時使用 swap 的情況下,寫入量很小。若長時間大量換頁,代表需要的是更多 RAM,而不是更多 swap。

Swap 檔案會比 Swap 分割槽慢嗎?

在新版核心上差異可以忽略。swap 檔案在 VPS 上更容易建立、調整與移除,因此本文采用 swap 檔案。

加了 Swap,MySQL 還是被殺掉,怎麼辦?

請檢查 journalctl -k | grep -i oom 與 free -h。若 swap 已用滿,請調低 innodb_buffer_pool_size 與Web 伺服器 worker 數量,或升級到記憶體更大的套餐。

如需協助處理伺服器的 Swap 或記憶體問題,請至 https://www.justg.com/submitticket.php 提交工單,JUSTG 技術支援團隊會協助您。

這篇文章有幫助嗎?
幫助中心
Linux 伺服器 Linux SSH 金鑰登入教程:設定 ed25519 金鑰並禁用密碼登入 只要伺服器有公網 IPv4,上線幾分鐘內就會遇到 SSH 暴力破解機器人,而密碼登入正是它們的首要目標。本文說明如何用較新的 ed25519 金鑰完成 Linux SSH 金鑰登入,再禁用 SSH 密碼登入,全程避免把自己鎖在門外。步驟適用於 Debian… Linux 伺服器 Linux VPS 修改 SSH 連接埠與 root 密碼教程(安全不斷線) 把 SSH 從 22 連接埠移走雖然擋不住有心的攻擊者,卻能讓日誌裡大部分自動掃描消失;而任何新伺服器的第一件事,就是換一組新的 root 密碼。本文說明如何在 Linux VPS 修改 SSH 連接埠與 root 密碼且不斷線:修改 sshd_config、在 Rocky… Linux 伺服器 Linux 防火牆設定教程:VPS 使用 UFW 與 firewalld(含 IPv6) 新安裝的 Linux 伺服器,任何服務開啟的連接埠都會直接對外響應,因此主機防火牆是最先要設定的專案之一。本文說明如何在 Debian / Ubuntu 用 UFW 設定 Linux 防火牆,以及在 CentOS、Rocky Linux、AlmaLinux 使用… Linux 伺服器 Linux 硬碟空間已滿怎麼辦?VPS 找出並釋放磁碟空間教程 “No space left on device”幾乎會讓伺服器上所有東西出問題:資料庫無法寫入、網站返回錯誤、軟體包更新失敗,有時甚至無法正常登入。本文一步步說明如何排除 Linux 硬碟空間已滿:先確認是資料塊還是 inode 用完,再用 du 與 ncdu… Linux 伺服器 VPS 安裝 aaPanel 教程:aaPanel(寶塔國際版)安裝與安全設定 aaPanel 是寶塔面板的國際版,透過網頁介面即可管理網站、資料庫、PHP 版本、SSL 證書與備份。本文說明如何在 JUSTG VPS 安裝 aaPanel(東京、首爾、莫斯科的雲伺服器或 JUSTG 獨立伺服器,系統支援…
AlipayUnionPayVISAMastercardPayPalUSDTstripe