Linux 核心為提升 I/O 效能,會積極使用閒置記憶體作為 Page Cache(頁面快取)、Buffer Cache(區塊快取) 與 Dentry/Inode Cache。長時間大量檔案操作後,可用記憶體會被快取佔滿。雖然核心會在記憶體壓力時自動回收,但有時需手動釋放(如執行大型應用前、效能測試基準線)。本文說明安全釋放流程與參數含義。

寫入數值觸發核心釋放對應快取:
| 數值 | 動作 | 適用場景 |
|---|---|---|
0 | 不釋放(預設) | 正常運作 |
1 | 釋放 Page Cache(檔案內容快取) | 釋放最大塊記憶體,影響較小 |
2 | 釋放 Dentry 與 Inode Cache | 釋放檔案系統元資料快取 |
3 | 釋放所有上述快取 | 最大釋放量,生產環境謹慎使用 |
# 步驟 1:將髒頁寫回磁碟,防止資料遺失
sync
# 步驟 2:釋放快取(以釋放全部為例)
echo 3 > /proc/sys/vm/drop_caches
free -h
# 或
cat /proc/meminfo | grep -E 'MemFree|Cached|Buffers'
#!/bin/bash
# /usr/local/bin/clean_cache.sh
sync
echo 3 > /proc/sys/vm/drop_caches
echo "$(date): Cache dropped" >> /var/log/clean_cache.log
加入 crontab(需 root 權限):
0 3 * * * /usr/local/bin/clean_cache.sh
sync:未寫入磁碟的資料會遺失drop_caches 不會釋放 Swap 空間修改 /etc/sysctl.conf:
vm.vfs_cache_pressure = 100 # 預設 100,增大值可優先回收 Dentry/Inode
vm.dirty_ratio = 20 # 髒頁比例上限
vm.dirty_background_ratio = 10
套用:sysctl -p
理解快取機制與正確釋放方式,能在需要時精準釋放記憶體,避免盲目操作導致效能倒退或資料風險。