[轉]如何正確查看Linux機器內存使用狀況

原文連接html

如何正確查看Linux機器內存使用狀況
背景
只要工做上涉及到Linux機器,基本上都會有這樣一個需求,查看內存使用狀況,可是怎麼看才正確呢?以前使用的是top命令,一直存在一個誤區。node

爲何top命令看內存會有誤區?
top是個很好用的系統分析工具,能夠實時查看進程,cpu使用率,內存使用率等狀況,有點像windows下的任務管理器。我之前一直覺得top看到的就是真正的內存使用狀況,後來baidugoogle很久,才發現本身圖樣。= =||
首先看下top命令後展現出來的內存使用狀況,我用本身一臺搬瓦工vps作示範:windows

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(緩存內存):tomcat

當你讀寫文件的時候,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行信息。google

相關文章
相關標籤/搜索