Linux下應用程序到底使用了多少內存


一般我們通過top命令查看IO,Mem使用,由於很多程序是配置的內存參數,所以即使真正沒有使用那麼多內存,也會被這些程序佔用 。top看到的不是程序實際使用的大小 。

[root@ECSDB ~]# free 
total used free shared buffers cached
Mem: 16406396 16370448 35948 0 91624 15534544
-/+ buffers/cache: 744280 15662116 
Swap: 16779884 113044 16666840
第二部分(-/+ buffers/cache):
(-buffers/cache) used內存數:286M (指的第一部分Mem行中的used - buffers - cached)
(+buffers/cache) free內存數: 715M (指的第一部分Mem行中的free + buffers + cached)
可見-buffers/cache反映的是被程序實實在在吃掉的內存(見上面 744280k 是實際程序使用的內存 ) ,而+buffers/cache反映的是可以挪用的內存總數。
資料:
--------------------------------------------------------------------------
.linux的內存是很說究的.
如下顯示free是顯示的當前內存的使用,-m的意思是M字節來顯示內容.我們來一起看看.
  1. $ free -m
total used free shared buffers cached
Mem: 1002 769 232 0 62 421
-/+ buffers/cache: 286 715
Swap: 1153 0 1153
第一部分Mem行:
total 內存總數: 1002M
used 已經使用的內存數: 769M
free 空閒的內存數: 232M
shared 當前已經廢棄不用,總是0
buffers Buffer 緩存內存數: 62M
cached Page 緩存內存數:421M
關係:total(1002M) = used(769M) + free(232M)
第二部分(-/+ buffers/cache):
(-buffers/cache) used內存數:286M (指的第一部分Mem行中的used - buffers - cached)
(+buffers/cache) free內存數: 715M (指的第一部分Mem行中的free + buffers + cached)
可見-buffers/cache反映的是被程序實實在在吃掉的內存,而+buffers/cache反映的是可以挪用的內存總數。
第三部分是指交換分區, 我想不講大家都明白.
我想大家看了上面,還是很暈.第一部分(Mem)與第二部分(-/+ buffers/cache)的結果中有關used和free爲什麼這麼奇怪.
其實我們可以從二個方面來解釋.
操作系統來講是Mem的參數.buffers/cached 都是屬於被使用,所以它認爲free只有232.
應用程序來講是(-/+ buffers/cach).buffers/cached 是等同可用的,因爲buffer/cached是爲了提高程序執行的性能,當程序使用內存時,buffer/cached會很快地被使用。
所以,以應用來看看,以(-/+ buffers/cache)的free和used爲主.所以我們看這個就好了.另外告訴大家一些常識.Linux爲了提高磁盤和內存存取效率, Linux做了很多精心的設計, 除了對dentry進行緩存(用於VFS,加速文件路徑名到inode的轉換), 還採取了兩種主要Cache方式:Buffer Cache和Page Cache。前者針對磁盤塊的讀寫,後者針對文件inode的讀寫。這些Cache能有效縮短了 I/O系統調用(比如read,write,getdents)的時間。
記住內存是拿來用的,不是拿來看的.不象windows,無論你的真實物理內存有多少,他都要拿硬盤交換文件來讀.這也就是windows爲什麼常常提示虛擬空間不足的原因.你們想想,多無聊,在內存還有大部分的時候,拿出一部分硬盤空間來充當內存.硬盤怎麼會快過內存.所以我們看linux,只要不用swap的交換空間,就不用擔心自己的內存太少.如果常常swap用很多,可能你就要考慮加物理內存了.這也是linux看內存是否夠用的標準哦.

free 命令詳解
  功能說明:顯示內存狀態。
  語  法: free [-bkmotV][-s ]
  補充說明:free指令會顯示內存的使用情況,包括實體內存,虛擬的交換文件內存,共享內存區段,以及系統核心使用的緩衝區等。
  參  數:
  -b  以Byte爲單位顯示內存使用情況。
  -k  以KB爲單位顯示內存使用情況。
  -m  以MB爲單位顯示內存使用情況。
  -o  不顯示緩衝區調節列。
  -s  持續觀察內存使用狀況。
  -t  顯示內存總和列。
  -V  顯示版本信息。

vmstat 2 10
常用的性能查看命令
ECSDB$vmstat 2 10
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 112544 38772 96480 15558748 0 0 1 31 32 8 0 0 100 0
0 0 112544 38772 96480 15558748 0 0 0 16 1008 30 0 0 100 0
0 0 112544 38772 96480 15558748 0 0 0 38 1010 27 0 0 100 0
0 0 112544 38772 96484 15558744 0 0 0 12 1009 25 0 0 100 0
0 0 112544 38772 96484 15558744 0 0 0 16 1006 27 0 0 100 0
0 0 112544 38772 96484 15558744 0 0 0 22 1009 24 0 0 100 0
0 0 112544 38772 96484 15558744 0 0 0 56 1020 27 0 0 100 0
0 0 112544 38772 96484 15558744 0 0 0 16 1007 26 0 0 100 0
0 0 112544 38772 96484 15558744 0 0 0 22 1009 26 0 0 100 0
0 0 112544 38836 96484 15558744 0 0 0 0 1005 21 0 0 100 0
如果很多的SWAP空間被使用,一般你的系統內存不足
Cache 當系統內存比應用需要的內存多的時候,系統會把數據cache在內存中,減少費時的IO操作
Buffer 當應用程序在做寫磁盤操作時,系統會把要寫的數據buffer起來,等到一個觸發點的時候,再把buffer中的數據刷新到磁盤,減少應用程序等待IO操作的時間.
一般你在看一個運行長時間的系統時,會發現它的可用內存很少,但是Cache和Buffer很大,這是正常情況,系統會利用你的所有自由內存來cache數據,當它需要分配內存的時候,會把cache的數據放回到disk
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章