最近遇到一個疑問奶躯,不管是top,還是cat /proc/meminfo, ?發(fā)現(xiàn)free內存基本快沒了特漩,難道我們的程序出問題了吧雹?排查半天沒有事,
后來百度到相關帖子涂身,記錄一下雄卷,這是Linux內核機制,
Linux與Windows不同蛤售,會存在緩存內存丁鹉,通常叫做Cache Memory。有些時候你會發(fā)現(xiàn)沒有什么程序在運行悴能,但是使用top或free命令看到可用內存會很少揣钦。
什么是Cache Memory(緩存內存):
當你讀寫文件的時候,Linux內核為了提高讀寫效率與速度漠酿,會將文件在內存中進行緩存冯凹,這部分內存就是Cache Memory(緩存內存)。即使你的程序運行結束后记靡,Cache Memory也不會自動釋放谈竿。這就會導致你在Linux系統(tǒng)中程序頻繁讀寫文件后,你會發(fā)現(xiàn)可用物理內存會很少摸吠。
其實這緩存內存(Cache Memory)在你需要使用內存的時候會自動釋放空凸,所以你不必擔心沒有內存可用。如果你希望手動去釋放Cache Memory(緩存內存)的話也是有辦法的寸痢。
釋放Cache Memory(緩存內存):
用下面的命令可以釋放Cache Memory:
[rootmin@localhost~]#echo 3 > /proc/sys/vm/drop_caches
Linux中如何釋放cache內存
因為LINUX的內核機制呀洲,一般情況下不需要特意去釋放已經使用的cache。這些cache起來的內容可以增加文件以及的讀寫速度啼止。
先說下free命令怎么看內存
[rootmin@localhost~]# free
total used free shared buffers cached
Mem: 515588 295452 220136 0 2060 64040
-/+ buffers/cache: 229352 286236
Swap: 682720 112 682608
其中第一行用全局角度描述系統(tǒng)使用的內存狀況:
total——總物理內存?
used——已使用內存道逗,一般情況這個值會比較大,因為這個值包括了cache+應用程序使用的內存
free——完全未被使用的內存
shared——應用程序共享內存
buffers——緩存献烦,主要用于目錄方面,inode值等(ls大目錄可看到這個值增加)
cached——緩存滓窍,用于已打開的文件
注意:
total=used+free
used=buffers+cached (maybe add shared also)
第二行描述應用程序的內存使用:
前個值表示-buffers/cache——應用程序使用的內存大小,used減去緩存值
后個值表示+buffers/cache——所有可供應用程序使用的內存大小巩那,free加上緩存值
注意
-buffers/cache=used-buffers-cached
+buffers/cache=free+buffers+cached
第三行表示swap的使用:?
used——已使用
free——未使用
cache釋放:
1. ? To free pagecache:
[rootmin@localhost~]#echo 1 > /proc/sys/vm/drop_caches
2. ? To free dentries and inodes:
[rootmin@localhost~]#echo 2 > /proc/sys/vm/drop_caches
3. ? To free pagecache, dentries and inodes:
[rootmin@localhost~]#echo 3 > /proc/sys/vm/drop_caches
說明吏夯,釋放前最好sync一下此蜈,防止丟數(shù)據(jù)