最近遇到乙個疑問,不管是top,還是cat /proc/meminfo, 發現free記憶體基本快沒了,難道我們的程式出問題了?排查半天沒有事,
linux與windows不同,會存在快取記憶體,通常叫做cache memory。有些時候你會發現沒有什麼程式在執行,但是使用top或free命令看到可用記憶體會很少。
什麼是cache memory(快取記憶體):
當你讀寫檔案的時候,linux核心為了提高讀寫效率與速度,會將檔案在記憶體中進行快取,這部分記憶體就是cache memory(快取記憶體)。即使你的程式執行結束後,cache memory也不會自動釋放。這就會導致你在linux系統中程式頻繁讀寫檔案後,你會發現可用物理記憶體會很少。
其實這快取記憶體(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
其中第一行用全域性角度描述系統使用的記憶體狀況:
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一下,防止丟資料
Linux系統記憶體buff cache占用過多
用free或者top命令都能檢視記憶體使用情況 在雲伺服器上,total used free buff cache linux核心會在記憶體將要耗盡的時候,觸發記憶體 的工作,以便釋放出記憶體給急需記憶體的程序使用。一般情況下,這個操作中主要的記憶體釋放都來自於對buffer cache的釋放。還可...
linux記憶體占用問題
linux開機後,使用top命令檢視,4g物理記憶體發現已使用的多大3.2g,佔用率高達80 以上 mem 3889836k total,3341868k used,547968k free,286044k buffers swap 6127608k total,0k used,6127608k f...
檢視linux記憶體占用
可以直接使用top命令後,檢視 mem的內容。可以選擇按程序檢視或者按使用者檢視,如想檢視oracle使用者的程序記憶體使用情況的話可以使用如下的命令 1 top top命令是linux下常用的效能分析工具,能夠實時顯示系統中各個程序的資源占用狀況,類似於windows的任務管理器 可以直接使用to...