? ? ~~~ free -h 與 sync ~~~? ?
清理內(nèi)存前,得先知道內(nèi)存去哪兒了。free -h

內(nèi)存(物理內(nèi)存)部分
total:系統(tǒng)總共的物理內(nèi)存容量,這里是約 7.7GiB。
used:已經(jīng)被使用的物理內(nèi)存容量,為 2.3GiB。free:完全空閑、未被使用的物理內(nèi)存容量,是 175MiB。
shared:被多個進(jìn)程共享使用的內(nèi)存容量,為 1.0MiB。
buff/cache:用于緩存(如文件緩存等)的內(nèi)存容量,共 5.2GiB。
available:系統(tǒng)當(dāng)前可用于新進(jìn)程分配的內(nèi)存容量(考慮了緩存等可回收部分),為 5.1GiB。
交換(swap 分區(qū))部分
total:交換分區(qū)的總?cè)萘?,?974MiB。
used:已經(jīng)被使用的交換分區(qū)容量,為 2.0MiB。
free:空閑的交換分區(qū)容量,為 972MiB。
關(guān)鍵結(jié)論:判斷是否需清理緩存,主要看 buffers/cache后值或 available(可用內(nèi)存)。這兩個值:低 = 真缺內(nèi)存(物理上的缺,叫老板加錢加內(nèi)存條了?。?,高 = 不缺(緩存能釋放)。
清理前的防提桶跑路操作:sync 同步(別說我沒跟你提醒過啊?。?/p>
Linux 緩存是異步寫入的,部分?jǐn)?shù)據(jù)僅在內(nèi)存未寫入硬盤,直接清理會丟失。sync命令可強(qiáng)制將緩存數(shù)據(jù)同步到硬盤:
sync
等命令執(zhí)行完成,就可以開始緩存釋放了。
Linux通過/proc/sys/vm/drop_caches文件控制緩存釋放,向其寫入不同數(shù)字可釋放對應(yīng)緩存,并且操作需 root 權(quán)限:
寫入 0:不釋放任何緩存(默認(rèn)值);
寫入 1:僅釋放文件內(nèi)容緩存(cached),適合刪除大量文件后清理;
寫入 2:僅釋放目錄、文件屬性緩存(dentries 和 inodes),適合頻繁創(chuàng)建 / 刪除文件后使用;寫入 3:釋放所有緩存(=1+2),需最大程度釋放內(nèi)存時用(如部署大型程序前)。
例如,執(zhí)行釋放所有緩存:
sync? # 先同步數(shù)據(jù)到硬盤,必加!
echo 3 > /proc/sys/vm/drop_caches
效果驗(yàn)證:清理前后分別執(zhí)行free -h對比,buffers/cache后值明顯變少,free值明顯增加了:重點(diǎn)提醒:下面這些錯誤千萬別犯!

禁止定時自動清理緩存,設(shè)置 cron 定時清理緩存會讓系統(tǒng)重新從硬盤讀取數(shù)據(jù),反而變慢。僅臨時需要內(nèi)存時手動清理,絕不能定時操作。
不執(zhí)行 sync 就清理 = 數(shù)據(jù)自殺,跳過 sync 直接清理,會丟失未寫入硬盤的臨時數(shù)據(jù),輕則丟文件,重則數(shù)據(jù)損壞!
另外,清理緩存≠解決內(nèi)存不足的根本問題,若清理后 available 很快變低,說明是應(yīng)用本身占用內(nèi)存過高(如內(nèi)存泄漏),需用top或htop查看高內(nèi)存占用進(jìn)程,優(yōu)化程序或升級硬件才是關(guān)鍵。