
Proxmox ZFS 食晒 RAM?先睇清 ARC,再決定使唔使封頂
高 RAM 用量好多時只係正常 cache,舊安裝先要特別查設定
XDA Developers 最近講到一個幾常見嘅 Proxmox 疑難:host 明明裝咗唔少 RAM,但開幾部 VM 之後,記憶體圖表長期貼近頂。文章將焦點放喺 ZFS ARC 上限,不過標題講到 ARC 會餓住 VM,就有少少過火。ARC 佔用大量空閒 RAM,本身係正常設計;要處理嘅情況係系統已經出現持續記憶體壓力。
ARC 用 RAM,其實做緊咩
ZFS 同時處理檔案系統、儲存池、checksum、壓縮同 copy-on-write,亦有自己一套讀取 cache。ARC 全名係 Adaptive Replacement Cache,會將近期讀過同經常讀取嘅資料留喺 RAM,連 metadata 都會 cache。機械硬碟 pool、大量細檔案、重複讀取 VM image 呢類工作負載,通常特別受惠。RAM 留空冇效能獎勵,ZFS 趁空閒用嚟減少磁碟 I/O,方向完全合理。
問題係 ARC 喺 Linux 上唔會當成一般 page cache 顯示,監察工具可能會將佢計入已用記憶體。結果就係 Proxmox 個 RAM 圖好紅,但系統依然運作正常。當其他程式要 RAM,ARC 會因應記憶體壓力縮細;回收亦有時間差,所以突然啟動大型 VM、冇 swap,或者 guest 開咗 memory ballooning 時,短暫延遲先比較容易浮現。
zfs_arc_max 只係天花板
Linux 上嘅 zfs_arc_max 控制 ARC 可以長到幾大,佢係上限,唔代表 ZFS 一開機就預留晒嗰筆 RAM。OpenZFS 官方亦講明,呢個參數可以動態改,不過即時調低至低過現有 ARC 大小,冇記憶體壓力推動回收時,ARC 未必會即刻縮落去。所以改完望一眼圖表冇變,唔等於設定失效;亦唔應該為咗令圖表好睇,硬壓到一個極細數值。
版本差異先最易令人中伏。Proxmox 官方文件寫明,VE 8.1 起嘅新 ZFS 安裝會將 ARC 上限設成實體 RAM 約 10%,最高 16 GiB,數值寫入 /etc/modprobe.d/zfs.conf。較舊安裝一路升級上嚟,設定檔未必存在,亦可能保留裝機當日計出嘅舊數值。XDA 作者就遇到後一種情況:16 GB RAM 時留下約 1.55 GB 上限,之後加至 32 GB RAM 同建立 8 TB mirror,個上限仍然冇郁,重複讀取同 metadata cache 反而食咗虧。
冇明確設定時,實際預設亦要睇 OpenZFS 版本。2.3.0 之前,Linux 一般以一半實體 RAM 做上限;2.3.0 起,官方改用「總 RAM 減 1 GiB」同「總 RAM 嘅八分之五」之中較大嗰個數。呢個係容許 ARC 成長嘅天花板,唔係日常必然佔用量。Proxmox 自己寫入嘅上限會蓋過 OpenZFS 預設,所以淨係見到網上有人講 50%、10% 或接近全機 RAM,都未足以判斷自己部機行緊邊套設定。
先搵記憶體壓力嘅證據
排查可以先睇 arc_summary,再檢查 /etc/modprobe.d/zfs.conf 同 /sys/module/zfs/parameters/zfs_arc_max,分清而家 ARC 大小、目標同上限。跟住睇 MemAvailable、swap 活動、kernel 有冇 OOM 記錄、VM ballooning,同啟動 VM 時有冇明顯 I/O 或延遲尖峰。單憑「used RAM 90%」落判斷太早;available memory 長期見底、頻密 swap、VM 嘅 RAM 俾 host 收返,或者服務卡頓,先係值得調校嘅實際訊號。
真係要封頂,數值要按工作負載慢慢試。Proxmox 提供嘅粗略參考係至少 2 GiB,再按每 1 TiB 儲存加 1 GiB,但官方同時提醒,ARC 太細會傷 I/O 效能。以 VM 密度為主、經常臨時開機嘅節點,可以保守一點;主要做 NAS、重複讀取多、又有充足 RAM 嘅機,較大 ARC 往往有價值。持久修改後,如 root filesystem 用 ZFS,仲要更新 initramfs 同重新開機,之後再核對實際值。
XDA 呢宗個案最有用嘅提醒,其實係加 RAM、升級 Proxmox 或後加 ZFS pool 之後,要重新檢查舊設定。見到 ARC 大就立即斬細,未必幫到 VM;見到舊上限太低又一直唔郁,同樣會白白浪費新加嘅 RAM。保留調整前後數據,睇 cache hit、磁碟延遲、swap 同 VM 表現,再決定個上限,會穩陣得多。
參考來源
- XDA Developers — Proxmox has a ZFS setting nobody touches, and it could be starving your home lab of performance — original report
- Proxmox VE Administration Guide:Limit ZFS Memory Usage — 官方說明 Proxmox VE 8.1 新安裝預設、建議容量同持久修改方法
- OpenZFS:Module Parameters — zfs_arc_max — 官方定義參數用途、動態修改限制同 OpenZFS 2.3.0 前後預設差異
- Proxmox VE 8.1 Roadmap — 核對 Proxmox 將新 ZFS 安裝 ARC 目標改成約 10% RAM 嘅版本背景
本文根據原文及公開資料整理;資料有出入時,以原文及官方資料為準。







