萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux 手動釋放記憶體快取指令詳解(sync + drop_caches)

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

Linux 記憶體快取機制示意

核心控制介面:/proc/sys/vm/drop_caches

寫入數值觸發核心釋放對應快取:

數值動作適用場景
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:未寫入磁碟的資料會遺失
  • 生產環境避免常態性釋放:快取能大幅提升 I/O 效能,頻繁清理反而降低效能
  • 不解決根本問題:若記憶體長期不足,應擴充實體記憶體或優化應用,而非依賴清理快取
  • Swap 不受影響: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

理解快取機制與正確釋放方式,能在需要時精準釋放記憶體,避免盲目操作導致效能倒退或資料風險。

copyright © 萬盛學電腦網 all rights reserved