跳转到帖子
在手机APP中查看

一个更好的浏览方法。了解更多

PHP论坛人

主屏幕上的全屏APP,带有推送通知、徽章等。

在iOS和iPadOS上安装此APP
  1. 在Safari中轻敲分享图标
  2. 滚动菜单并轻敲添加到主屏幕
  3. 轻敲右上角的添加按钮。
在安卓上安装此APP
  1. 轻敲浏览器右上角的三个点菜单 (⋮) 。
  2. 轻敲添加到主屏幕安装APP
  3. 轻敲安装进行确认。

Debian 13 Swap 設定

精选回复

環境:Debian 13 (Trixie)

VPS規格:2 vCPU / 2GB RAM

適用情境:LNMP 論壇



---------------
前言
---------------

為什麼需要 Swap?

在部署 LNMP(Linux + Nginx + MySQL/MariaDB + PHP)之前,務必先確認並設定 Swap

當實體 RAM 耗盡時,若無 Swap 緩衝,核心的 OOM Killer(Out-of-Memory Killer) 會強制終止佔用記憶體最多的程序

在LNMP環境中,最常被殺掉的往往是 MySQL / MariaDB,導致資料庫異常斷線,進而引發整個網站服務中斷



Swap 的核心用途:

作為記憶體壓力緩衝,避免系統崩潰

讓不常使用的記憶體頁面移出 RAM,釋放空間給活躍程序

提升 2GB 低記憶體環境下的整體穩定性



重要觀念:Swap 是「緊急緩衝」,不是 RAM 的替代品。若系統頻繁使用 Swap,代表記憶體本身不足,應考慮升級 RAM 或優化服務記憶體配置

此外,長期大量 Swap 寫入會加速 SSD 的壽命損耗,請特別留意



Swap 大小建議

RAM大小:≤ 2GB
建議Swap大小:RAM 的 2倍(約 2~4 GB)
說明:低記憶體環境,緩衝空間需求較高


RAM大小:2~8GB
建議Swap大小:RAM 的 1倍(約 4~8 GB)
說明:一般生產環境


RAM大小:> 8GB
建議Swap大小:4~8 GB 固定即可
說明:過大反而浪費磁碟空間


本教學環境(2 GB RAM)建議設定 4GB Swap

若有啟用 Hibernate(休眠)功能,Swap 大小需 ≥ RAM,否則無法完整儲存記憶體狀態

VPS環境通常不需要休眠,可忽略此點



------------------------------
確認記憶體與 Swap 狀態
------------------------------

確認記憶體與Swap狀態
free -h



預期輸出(尚未設定 Swap 的情況)
               total        used        free      shared      buff/cache   available
Mem:    1.8Gi       193Mi     1.7Gi       400Ki    72Mi              1.6Gi
Swap:    0B            0B            0B



Swap: 0B 表示尚未設定Swap,在 2GB LNMP環境中,這是高風險狀態,應立即設定






----------------------
確認磁碟剩餘空間
----------------------

建立Swap前,請先確認磁碟有足夠空間,Swap 大小 + 系統使用量必須低於磁碟容量,否則會造成磁碟塞滿(Disk Full),比沒有Swap更嚴重

df -h /


確認 / 根目錄 的 Avail 欄位,至少須預留 Swap 大小 + 2GB 的系統緩衝空間




-----------------------
建立並啟用Swap
-----------------------

所有指令均需以 root 身份或透過 sudo 執行


建立Swap存放目錄
mkdir -p /var/swapfile


-p 參數確保目錄已存在時不報錯。將 Swap 放在 /var/swapfile/ 而非直接放在 /,目的是方便管理,並與系統目錄區隔




------------------------------------
建立 Swap 檔案
------------------------------------

建立 Swap 檔案,以 4GB 為例

dd if=/dev/zero of=/var/swapfile/file.swap bs=1M count=4096 status=progress



參數:if=/dev/zero
說明:從零裝置讀取,以全零位元填充(安全且快速)

參數:of=/var/swapfile/file.swap
說明:輸出的 Swap 檔案路徑

參數:bs=1M
說明:每次讀寫區塊大小為 1MB

參數:count=4096
說明:執行 4096次,總大小 = 4096 × 1MB = 4GB

參數:status=progress
說明:顯示建立進度(Debian 13 支援)


注意:此指令需等待一段時間(依磁碟速度而定,SSD通常 30秒內完成)

請勿中途中斷,否則 Swap 檔案會不完整,後續格式化可能失敗或使用時產生錯誤





-----------------------------
設定安全權限(重要)
-----------------------------

設定權限
chmod 600 /var/swapfile/file.swap



必須在格式化前設定,否則任何使用者都能讀取 Swap 中的記憶體殘留資料,造成潛在的安全風險(例如洩漏資料庫密碼、Session Token 等敏感資料)

600 表示「僅 root 可讀寫,其他使用者無任何權限」。






驗證權限是否正確
ls -lh /var/swapfile/file.swap



正確輸出
-rw------- 1 root root 4.0G May 19 16:25 /var/swapfile/file.swap







----------------------------
格式化為 Swap
----------------------------

mkswap /var/swapfile/file.swap



正常輸出:
Setting up swapspace version 1, size = 4 GiB (4294963200 bytes)
no label, UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx


請記下或備份此 UUID (每個VPS都不同)

可作為日後 /etc/fstab 掛載方式的替代識別依據(UUID 掛載比路徑掛載更穩定,進階使用者可採用)







----------------------
立即啟用 Swap
----------------------

立即啟用
swapon /var/swapfile/file.swap





確認是否啟用
swapon --show



預期輸出
NAME                              TYPE  SIZE USED   PRIO
/var/swapfile/file.swap file    4G    0B         -2




也可以用這個指令,確認是否啟用
free -h


若Swap欄位 total 顯示 4G,即代表成功啟用





--------------------------
設定開機自動掛載
--------------------------

僅執行 swapon 只是臨時啟用,重開機後 Swap 會消失。必須寫入 /etc/fstab 才能永久生效



備份 fstab(強烈建議!)
cp /etc/fstab /etc/fstab.bak


/etc/fstab 設定錯誤可能導致系統無法開機,修改前務必備份




----------------------------
確認 Swap 檔案路徑
----------------------------

ls -lh /var/swapfile/file.swap


確認路徑無誤後再進行下一步


-----------------
寫入 fstab
-----------------


編輯
vi /etc/fstab


在底部加入以下內容


/var/swapfile/file.swap  swap  swap  defaults  0  0





儲存檔案並離開vi編輯器
按 Esc,輸入 :wq,按 Enter




欄位說明
欄位 1:裝置路徑或 UUID
欄位 2:掛載點(Swap 固定填 swap)
欄位 3:檔案系統類型(填 swap)
欄位 4:掛載選項(填 defaults 即可)
欄位 5:dump 備份標記(填 0,Swap 不需備份)
欄位 6:fsck 開機檢查順序(填 0,Swap 不進行 fsck)



-----------------------
驗證 fstab 語法
-----------------------


寫入後,務必立即驗證語法,錯誤的 fstab 會導致系統無法正常開機


# 模擬掛載所有 fstab 項目(不實際掛載),確認有無語法錯誤
mount -a




若無任何輸出、無 error 訊息,表示語法正確

若有錯誤,立即修正再繼續




-----------------------------------------
調校 Swappiness 與 Cache Pressure
-----------------------------------------

光是建立 Swap 還不夠,核心的 Swap 使用策略同樣影響 LNMP 服務的效能表現



vm.swappiness 控制核心傾向使用 Swap 的積極程度,範圍 0~100,預設值為 60

值越高 → 核心越積極將記憶體頁面移至 Swap(不適合生產環境)
值越低 → 核心盡量保留資料在 RAM,只在必要時才使用 Swap


LNMP生產環境建議值:10

立即生效(重開機後失效)
sysctl vm.swappiness=10



確認目前值
cat /proc/sys/vm/swappiness





vm.vfs_cache_pressure 控制核心回收目錄與 inode 快取的積極程度,預設值為 100

值越高 → 快取被更積極回收,檔案存取效能下降
值越低 → 快取保留更久,對頻繁讀寫檔案(如論壇貼圖、附件)有助益

LNMP生產環境建議值:50

sysctl vm.vfs_cache_pressure=50



------------------------
永久寫入設定
------------------------

以上兩項 sysctl 指令重開機後會重置,必須寫入設定檔才能永久生效

編輯
vi /etc/sysctl.d/99-swap.conf


貼上以下內容


# LNMP Production: 降低 Swap 使用積極程度
vm.swappiness = 10

# LNMP Production: 保留目錄與 inode 快取,改善檔案讀寫效能
vm.vfs_cache_pressure = 50





儲存檔案並離開vi編輯器
按 Esc,輸入 :wq,按 Enter






--------------------------------
套用設定
--------------------------------

套用設定(無需重開機)
sysctl -p /etc/sysctl.d/99-swap.conf



----------------
重開機驗證
----------------

完成所有設定後,重開機確認一切自動生效


重開機
reboot


重開機後逐項驗證


確認 Swap 已自動掛載並顯示正確大小
free -h



確認掛載詳情(Type、Size、Used、Priority)
swapon --show



確認 swappiness 已套用
cat /proc/sys/vm/swappiness



確認 vfs_cache_pressure 已套用
cat /proc/sys/vm/vfs_cache_pressure

本帖最后于,由Jack编辑

创建帐户或登录后发表意见

帐户

导航

搜索

搜索

配置浏览器推送通知

Chrome (安卓)
  1. 轻敲地址栏旁的锁形图标。
  2. 轻敲权限 → 通知。
  3. 调整你的偏好。
Chrome (台式电脑)
  1. 点击地址栏中的挂锁图标。
  2. 选择网站设置。
  3. 找到通知选项并调整你的偏好。