如何正確查看Linux機器內存使用情況


如何正確查看Linux機器內存使用情況

背景

只要工作上涉及到Linux機器,基本上都會有這樣一個需求,查看內存使用情況,但是怎么看才正確呢?之前使用的是top命令,一直存在一個誤區。

為什么top命令看內存會有誤區?

top是個很好用的系統分析工具,可以實時查看進程,cpu使用率,內存使用率等情況,有點像windows下的任務管理器。我以前一直以為top看到的就是真正的內存使用情況,后來baidugoogle好久,才發現自己圖樣。= =|| 
首先看下top命令后展示出來的內存使用情況,我用自己一台搬瓦工vps做示范:

Cpu(s):  0.0%us,  0.3%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:     73728k total,    70048k used,     3680k free,        0k buffers
Swap:    16384k total,     4696k used,    11688k free,    64716k cached

可以看到Mem: 73728k total, 70048k used, 3680k free, 0k buffers這一行,就是內存使用情況。一開始我也只看這一行。后來在公司的生產機子上看時,覺得很疑惑,只要是運行了一段時間的機子,內存的 total 和 used 總是非常的接近,free值很少,也就是說“內存使用率”非常高,哪怕我已經把各種服務都關掉了。但是就算這樣,服務器也沒有任何問題,再次啟動 tomcat服務,做一些小的壓測,表現的情況也很正常。那么問題就來了:明明內存情況這么緊張,怎么還能運行這么多服務,甚至做壓力測試呢?—> 答案其實很簡單,這些看起來used很多的內存中,一大部分是緩存,這就要說到Linux的內存管理機制了。

Linux中的Cache Memory

什么是Cache Memory(緩存內存):

當你讀寫文件的時候,Linux內核為了提高讀寫性能與速度,會將文件在內存中進行緩存,這部分內存就是Cache Memory(緩存內存)。即使你的程序運行結束后,Cache Memory也不會自動釋放。這就會導致你在Linux系統中程序頻繁讀寫文件后,你會發現可用物理內存會很少。 
其實這緩存內存(Cache Memory)在你需要使用內存的時候會自動釋放,所以你不必擔心沒有內存可用。 
只有當 free 減去 cached 剩下的這部分內存情況緊張時,才有可能出現應用程序沒有足夠內存使用的情況。

所以其實剛才top看到的內存使用情況,有一部分是緩存,那個緩存有多少呢?注意看最后有個mem那行后面有個buffers ,swap那行后面有個cached,這兩個就是緩存大小。所以如果要計算應用程序真正使用物理內存的情況,應該是used-cached-buffers才對,所以剛才top看到的物理內存使用情況為70048k-64716k=5332k。所以也才沒用多少嘛!

另外,如果單純想要看內存使用情況,用free命令其實更直觀:

total       used       free     shared    buffers     cached
Mem:         73728      70940       2788          0          0      64840
-/+ buffers/cache:       6100      67628
Swap:        16384       4500      11884

這些信息的說明大致如下: 
其中第一行用全局角度描述系統使用的內存狀況: 
total——總物理內存 
used——已使用內存,一般情況這個值會比較大,因為這個值包括了cache+應用程序使用的內存 
free——完全未被使用的內存 
shared——應用程序共享內存 
buffers——緩存,主要用於目錄方面,inode值等(ls大目錄可看到這個值增加) 
cached——緩存,用於已打開的文件 
注意-/+ buffers/cache: 6100 67628這行。 
前個值表示-buffers/cache—–>不包括緩存,應用程序物理內存使用情況,即 -buffers/cache=used-buffers-cached ,所以此時應用程序才用了6100k內存 。 
后個值表示+buffers/cache—–>所有可供應用程序使用的內存大小,free加上緩存值,即+buffers/cache=free+buffers+cached ,所以此時還有67628k 內存可供程序使用。 
另外,free命令也可以使用”-m” 參數,這樣顯示的內存信息是用MB算,而不是KB,大內存情況下,這樣更直觀。

free -m
-----------
             total       used       free     shared    buffers     cached
Mem:            72         69          2          0          0         63
-/+ buffers/cache:          5         66
Swap:           16          4         11

總結

 
使用top命令或者free命令看到的內存使用率used中,包含了緩存,如果要查看應用程序真正的內存使用情況,應該是used-cached-buffers ,或者直接看free命令結果的-/+ buffers/cache行信息。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM