手工釋放Linux Cache Memory 為了加速操作和減少磁碟I/O,內核通常會儘可能多地緩存記憶體,這部分記憶體就是Cache Memory(緩存記憶體)。根據設計,包含緩存數據的頁面可以按需重新用於其他用途(例如,應用程式)。 緩存記憶體在程式運行結束後不會自動釋放。這可能會導致程式頻繁讀寫文件後 ...
手工釋放Linux Cache Memory
為了加速操作和減少磁碟I/O,內核通常會儘可能多地緩存記憶體,這部分記憶體就是Cache Memory(緩存記憶體)。根據設計,包含緩存數據的頁面可以按需重新用於其他用途(例如,應用程式)。
緩存記憶體在程式運行結束後不會自動釋放。這可能會導致程式頻繁讀寫文件後可用物理記憶體變得很少,必要時(比如記憶體確實不夠用),需要主動釋放緩存記憶體。
註意:一般情況下,是不推薦主動釋放緩存記憶體的,除非你有非常明確的需求,比如測試程式緩存記憶體的使用情況,因為對同一應用程式來說,緩存記憶體是可用的。
釋放緩存內容
可以通過修改系統控制文件/proc/sys/vm/drop_caches
釋放緩存記憶體。
1、釋放pagecache
(頁面緩存)
echo 1 > /proc/sys/vm/drop_caches
2、釋放reclaimable slab objects (includes dentries and inodes)(可回收slab對象(包括dentry,inode))
echo 2 > /proc/sys/vm/drop_caches
3、釋放slab
對象和pagecache
echo 3 > /proc/sys/vm/drop_caches
這是一種非破壞性操作(non-destructive operation
),不會釋放任何臟對象。如果要增加此操作釋放的對象數量,可以在寫入/proc/sys/vm/drop_cache
之前運行sync
。這將最大限度地減少系統上臟對象的數量,並創建更多待刪除的候選對象。
需要註意的是/proc/sys/vm/drop_caches
不是用於控制,各種內核緩存(inodes,dentries,pagecache等等)增長的方法。當系統其它地方需要記憶體時,Linux內核會自動回收這些對象。
使用該文件可能引發性能問題。因為它會刪除緩存對象,可能需要消耗大量的I/O和CPU才能重新創建被刪除的對象,尤其是這些對象被大量使用的情況下。因此,不建議在測試或調試環境之外使用。
實踐測試
# free -m
total used free shared buff/cache available
Mem: 7794 2373 1478 431 3942 4691
Swap: 3967 0 3967
# echo 1 > /proc/sys/vm/drop_caches
# free -m
total used free shared buff/cache available
Mem: 7794 2373 2600 431 2821 4705
Swap: 3967 0 3967
# echo 2 > /proc/sys/vm/drop_caches
# free -m
total used free shared buff/cache available
Mem: 7794 1635 5527 431 631 5495
Swap: 3967 0 3967
# echo 3 > /proc/sys/vm/drop_caches
# free -m
total used free shared buff/cache available
Mem: 7794 1635 5529 431 630 5496
Swap: 3967 0 3967
參考連接
https://www.kernel.org/doc/Documentation/sysctl/vm.txt
作者:授客
微信/QQ:1033553122
全國軟體測試QQ交流群:7156436
Git地址:https://gitee.com/ishouke
友情提示:限於時間倉促,文中可能存在錯誤,歡迎指正、評論!
作者五行缺錢,如果覺得文章對您有幫助,請掃描下邊的二維碼打賞作者,金額隨意,您的支持將是我繼續創作的源動力,打賞後如有任何疑問,請聯繫我!!!
微信打賞
支付寶打賞 全國軟體測試交流QQ群