1. 程式人生 > 其它 >Linux 手工釋放Linux Cache Memory

Linux 手工釋放Linux 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