細心的朋友會注意到,當你在linux下頻繁訪問檔案後,物理記憶體會很快被用光,當程式結束後,記憶體不會被正常釋放,而是一直作為caching.這個問題,貌似有不少人在問,不過都沒有看到有什麼很好解決的辦法.那麼我來談談這個問題.
先來說說free命令
[root@server ~]# free -m
total used free shared buffers cached
mem: 249 163 86 0 10 94
-/+ buffers/cache: 58 191
swap: 511 0 511
其中:total 記憶體總數
used 已經使用的記憶體數
free 空閒的記憶體數
shared 多個程序共享的記憶體總額
buffers buffer cache和cached page cache 磁碟快取的大小
-buffers/cache 的記憶體數:used - buffers - cached
+buffers/cache 的記憶體數:free + buffers + cached
可用的memory=free memory+buffers+cached
有了這個基礎後,可以得知,我現在used為163mb,free為86,buffer和cached分別為10,94
那麼我們來看看,如果我執行複製檔案,記憶體會發生什麼變化.
[root@server ~]# cp -r /etc ~/test/
[root@server ~]# free -m
total used free shared buffers cached
mem: 249 244 4 0 8 174
-/+ buffers/cache: 62 187
swap: 511 0 511
在我命令執行結束後,used為244mb,free為4mb,buffers為8mb,cached為174mb,天吶都被cached吃掉了.別緊張,這是為了提高檔案讀取效率的做法.
引用[url] 為了提高磁碟訪問效率, linux做了一些精心的設計, 除了對dentry進行快取(用於vfs,加速檔案路徑名到inode的轉換), 還採取了兩種主要cache方式:buffer cache和page cache。前者針對磁碟塊的讀寫,後者針對檔案inode的讀寫。這些cache有效縮短了 i/o系統呼叫(比如read,write,getdents)的時間。"
那麼有人說過段時間,linux會自動釋放掉所用的記憶體,我們使用free再來試試,看看是否有釋放》?
[root@server test]# free -m
total used free shared buffers cached
mem: 249 244 5 0 8 174
-/+ buffers/cache: 61 188
swap: 511 0 511
ms沒有任何變化,那麼我能否手動釋放掉這些記憶體呢???回答是可以的!
/proc是乙個虛擬檔案系統,我們可以通過對它的讀寫操作做為與kernel實體間進行通訊的一種手段.也就是說可以通過修改/proc中的檔案,來對當前kernel的行為做出調整.那麼我們可以通過調整/proc/sys/vm/drop_caches來釋放記憶體.操作如下:
[root@server test]# cat /proc/sys/vm/drop_caches
0首先,/proc/sys/vm/drop_caches的值,預設為0
[root@server test]# sync
手動執行sync命令(描述:sync 命令執行 sync 子例程。如果必須停止系統,則執行 sync 命令以確保檔案系統的完整性。sync 命令將所有未寫的系統緩衝區寫到磁碟中,包含已修改的 i-node、已延遲的塊 i/o 和讀寫對映檔案)
[root@server test]# echo 3 > /proc/sys/vm/drop_caches
[root@server test]# cat /proc/sys/vm/drop_caches
3將/proc/sys/vm/drop_caches值設為3
[root@server test]# free -m
total used free shared buffers cached
mem: 249 66 182 0 0 11
-/+ buffers/cache: 55 194
swap: 511 0 511
再來執行free命令,發現現在的used為66mb,free為182mb,buffers為0mb,cached為11mb.那麼有效的釋放了buffer和cache.
有關/proc/sys/vm/drop_caches的用法在下面進行了說明
/proc/sys/vm/drop_caches (since linux 2.6.16)
writingtothisfilecauses the kernel to drop clean caches,
dentries and inodes from memory, causing that memorytobecome
free.
tofreepagecache,useecho 1 > /proc/sys/vm/drop_caches; to
free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches;
to free pagecache, dentriesandinodes,useecho3>
/proc/sys/vm/drop_caches.
because this is a non-destructive operationanddirtyobjects
are not freeable, the user should run sync(8) first.
linux下釋放cache記憶體
細心的朋友會注意到,當你在linux下頻繁訪問檔案後,物理記憶體會很快被用光,當程式結束後,記憶體不會被正常釋放,而是一直作為caching.這個問題,貌似有不少人在問,不過都沒有看到有什麼很好解決的辦法.那麼我來談談這個問題.先來說說free命令 root server free m total ...
linux下釋放cache記憶體
細心的朋友會注意到,當你在linux下頻繁訪問檔案後,物理記憶體會很快被用光,當程式結束後,記憶體不會被正常釋放,而是一直作為caching.這個問題,貌似有不少人在問,不過都沒有看到有什麼很好解決的辦法.那麼我來談談這個問題.先來說說free命令 root server free m total ...
linux下釋放cache記憶體
細心的朋友會注意到,當你在linux下頻繁訪問檔案後,物理記憶體會很快被用光,當程式結束後,記憶體不會被正常釋放,而是一直作為caching.這個問題,貌似有不少人在問,不過都沒有看到有什麼很好解決的辦法.那麼我來談談這個問題.先來說說free命令 root server free m total ...