如何正確查看Linux機(jī)器內(nèi)存使用情況
如何正確查看Linux機(jī)器內(nèi)存使用情況
只要工作上涉及到Linux機(jī)器,基本上都會(huì)有這樣一個(gè)需求,查看內(nèi)存使用情況,但是怎么看才正確呢?之前使用的是top命令,一直存在一個(gè)誤區(qū)。下面,讓我們一起去看看。
如何正確查看Linux機(jī)器內(nèi)存使用情況:
為什么top命令看內(nèi)存會(huì)有誤區(qū)?
top是個(gè)很好用的系統(tǒng)分析工具,可以實(shí)時(shí)查看進(jìn)程,cpu使用率,內(nèi)存使用率等情況,有點(diǎn)像windows下的任務(wù)管理器。我以前一直以為top看到的就是真正的內(nèi)存使用情況,后來(lái)baidugoogle好久,才發(fā)現(xiàn)自己圖樣。= =||
首先看下top命令后展示出來(lái)的內(nèi)存使用情況,我用自己一臺(tái)搬瓦工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這一行,就是內(nèi)存使用情況。一開(kāi)始我也只看這一行。后來(lái)在公司的生產(chǎn)機(jī)子上看時(shí),覺(jué)得很疑惑,只要是運(yùn)行了一段時(shí)間的機(jī)子,內(nèi)存的 total 和 used 總是非常的接近,free值很少,也就是說(shuō)“內(nèi)存使用率”非常高,哪怕我已經(jīng)把各種服務(wù)都關(guān)掉了。但是就算這樣,服務(wù)器也沒(méi)有任何問(wèn)題,再次啟動(dòng) tomcat服務(wù),做一些小的壓測(cè),表現(xiàn)的情況也很正常。那么問(wèn)題就來(lái)了:明明內(nèi)存情況這么緊張,怎么還能運(yùn)行這么多服務(wù),甚至做壓力測(cè)試呢?—> 答案其實(shí)很簡(jiǎn)單,這些看起來(lái)used很多的內(nèi)存中,一大部分是緩存,這就要說(shuō)到Linux的內(nèi)存管理機(jī)制了。
Linux中的Cache Memory
什么是Cache Memory(緩存內(nèi)存):
當(dāng)你讀寫(xiě)文件的時(shí)候,Linux內(nèi)核為了提高讀寫(xiě)性能與速度,會(huì)將文件在內(nèi)存中進(jìn)行緩存,這部分內(nèi)存就是Cache Memory(緩存內(nèi)存)。即使你的程序運(yùn)行結(jié)束后,Cache Memory也不會(huì)自動(dòng)釋放。這就會(huì)導(dǎo)致你在Linux系統(tǒng)中程序頻繁讀寫(xiě)文件后,你會(huì)發(fā)現(xiàn)可用物理內(nèi)存會(huì)很少。
其實(shí)這緩存內(nèi)存(Cache Memory)在你需要使用內(nèi)存的時(shí)候會(huì)自動(dòng)釋放,所以你不必?fù)?dān)心沒(méi)有內(nèi)存可用。
只有當(dāng) free 減去 cached 剩下的這部分內(nèi)存情況緊張時(shí),才有可能出現(xiàn)應(yīng)用程序沒(méi)有足夠內(nèi)存使用的情況。
所以其實(shí)剛才top看到的內(nèi)存使用情況,有一部分是緩存,那個(gè)緩存有多少呢?注意看最后有個(gè)mem那行后面有個(gè)buffers ,swap那行后面有個(gè)cached,這兩個(gè)就是緩存大小。所以如果要計(jì)算應(yīng)用程序真正使用物理內(nèi)存的情況,應(yīng)該是used-cached-buffers才對(duì),所以剛才top看到的物理內(nèi)存使用情況為70048k-64716k=5332k。所以也才沒(méi)用多少嘛!
另外,如果單純想要看內(nèi)存使用情況,用free命令其實(shí)更直觀:
total used free shared buffers cached
Mem: 73728 70940 2788 0 0 64840
-/+ buffers/cache: 6100 67628
Swap: 16384 4500 11884
這些信息的說(shuō)明大致如下:
其中第一行用全局角度描述系統(tǒng)使用的內(nèi)存狀況:
total——總物理內(nèi)存
used——已使用內(nèi)存,一般情況這個(gè)值會(huì)比較大,因?yàn)檫@個(gè)值包括了cache+應(yīng)用程序使用的內(nèi)存
free——完全未被使用的內(nèi)存
shared——應(yīng)用程序共享內(nèi)存
buffers——緩存,主要用于目錄方面,inode值等(ls大目錄可看到這個(gè)值增加)
cached——緩存,用于已打開(kāi)的文件
注意-/+ buffers/cache: 6100 67628這行。
前個(gè)值表示-buffers/cache—–>不包括緩存,應(yīng)用程序物理內(nèi)存使用情況,即 -buffers/cache=used-buffers-cached ,所以此時(shí)應(yīng)用程序才用了6100k內(nèi)存 。
后個(gè)值表示+buffers/cache—–>所有可供應(yīng)用程序使用的內(nèi)存大小,free加上緩存值,即+buffers/cache=free+buffers+cached ,所以此時(shí)還有67628k 內(nèi)存可供程序使用。
另外,free命令也可以使用”-m” 參數(shù),這樣顯示的內(nèi)存信息是用MB算,而不是KB,大內(nèi)存情況下,這樣更直觀。
free -m
-----------
total used free shared buffers cached
Mem: 72 69 2 0 0 63
-/+ buffers/cache: 5 66
Swap: 16 4 11
總結(jié)
使用top命令或者free命令看到的內(nèi)存使用率used中,包含了緩存,如果要查看應(yīng)用程序真正的內(nèi)存使用情況,應(yīng)該是used-cached-buffers ,或者直接看free命令結(jié)果的-/+ buffers/cache行信息。