Linux 記憶體使用情況

2021-06-22 07:56:08 字數 3652 閱讀 5711

linux系統如何檢視使用記憶體情況

[root@r2 ~]# free

total 

used 

free 

shared 

buffers 

cached

mem: 

215608 

142680 

72928 

0  19736 

86956

-/+ buffers/cache: 

35988 

179620

swap: 

1052248 

0  1052248

我們研究一下上面的free命令輸出引數值及含義

mem:  表示物理記憶體統計

-/+ buffers/cached : 表示物理記憶體的快取統計

swap: 表示硬碟上交換分割槽的使用情況,這個我們不去關心。

系統的總物理記憶體:215608kb,但系統當前真正可用的記憶體並不是第一行free標記的72928kb,它僅代表未被分配的記憶體。

我們使用total1、used1、free1、userd2、free2等名稱來代表上面統計資料的各值,1、2分別代表第一行和第二行的資料。

total1: 總計物理記憶體的大小

used1: 已使用多大記憶體(包含buffers 與cache),但其中可能部分快取並未實際使用

free1: 可用記憶體多少

shared1: 多個程序共享的記憶體總額

buffers1/cached1: 磁碟快取的大小,這些是系統分配但未被使用的buffers 和 cache

used2: 實際使用的buffers 與cache的總量,也是實際使用的記憶體總量。

free2: 未被使用的buffers 與cache和未被分配的記憶體之和,這就是系統當前實際可用記憶體。

第三行所指的是從應用程式角度來看,對於應用程式來說,buffers/cached 是等於可用的,因為 buffer/cached 是為了提高檔案讀取的效能,當應用程式需在用到記憶體的時候,buffer/cached會很快的被**。

所以從應用程式的角度來說,可用記憶體=系統free memory+buffers+cached

179620 = 72928 + 19736 + 86956

我們可以整理出如下等式:

total1 = used1 + free1

total1 = used2 + free2

used1 = buffers1 + cached1 +used2

free2 = buffers1 + cached1 + free1

cache 和 buffer的區別:

cache:快取記憶體,是位於cpu與主記憶體間的一種容量較小但速度很高的儲存器。由於cpu的速度遠高於主記憶體,cpu直接從記憶體中訪問資料要等待一定時間週期,cache中儲存著cpu剛用過或迴圈使用的一部分資料,當cpu再次使用該部分資料時可從cache中直接呼叫,這樣就減少了cpu的等待時間,提高了系統的效率。cache又分為一級cache(l1 cache)和二級cache(l2 cache),l1 cache整合在cpu內部,l2 cache早期一般是焊在主機板上,現在也都整合在cpu內部,常見的容量有256kb或512kb l2 cache。

buffer:緩衝區,乙個用於儲存速度不同步的裝置或優先順序不同的裝置之間傳輸資料的區域。通過緩衝區,可以使程序之間的相互等待變少,從而使從速度慢的裝置讀入資料時,速度快的裝置的操作程序不發生間斷。

free中的buffer和cache:(它們都是占用記憶體):

buffer : 作為buffer cache的記憶體,是塊裝置的讀寫緩衝區

cache: 作為page cache的記憶體, 檔案系統的cache

如果 cache 的值很大,說明cache住的檔案數很多。如果頻繁訪問到的檔案都能被cache住,那麼磁碟的讀io bi會非常小。

接下來我們解釋什麼時候記憶體會被交換,以及按什麼方式交換。當可用記憶體少於額定值的時候,就會開始進行交換。

如何看額定值:

[root@r2 ~]# cat /proc/meminfo

memtotal: 

215608 kb

memfree: 

72388 kb

buffers: 

20312 kb

cached: 

86984 kb

swapcached: 

0 kb

active: 

65140 kb

inactive: 

54940 kb

hightotal: 

0 kb

highfree: 

0 kb

lowtotal: 

215608 kb

lowfree: 

72388 kb

swaptotal: 

1052248 kb

swapfree: 

1052248 kb

dirty: 

8 kb

writeback: 

0 kb

anonpages: 

10964 kb

slab: 

7728 kb

pagetables: 

1224 kb

nfs_unstable: 

0 kb

bounce: 

0 kb

commitlimit: 

1160052 kb

committed_as: 

137364 kb

vmalloctotal: 

630776 kb

vmallocused: 

4864 kb

vmallocchunk: 

625772 kb

用free -m 檢視的結果:

[root@r2 ~]# free -m

total 

used 

free 

shared 

buffers 

cached

mem: 

210 

139 

70 0  19 

84-/+ buffers/cache: 

35 175

swap: 

1027 

0  1027

檢視/proc/kcore檔案的大小(記憶體映象):

[root@r2 ~]# ll -h /proc/kcore

-r-------- 1 root root 219m apr  9 22:44 /proc/kcore

備註:占用記憶體的測量

測量乙個程序占用了多少記憶體,linux為我們提供了乙個很方便的方法, /proc 目錄為我們提供了所有的資訊,實際上top等工具也通過這裡來獲取相應的資訊。

/proc/meminfo  機器的記憶體使用情況

/proc/pid/maps pid為程序號,顯示當前程序所占用的虛擬位址

/proc/pid/statm 程序所占用的記憶體

我們通過free命令檢視機器空閒記憶體時,有時候會發現free的值很小。這主要是因為,在linux中有這麼一種思想,記憶體不用白不用,因此它盡可能的cache和buffer一些資料,以方便下次使用。但實際上這些記憶體也是可以立刻拿來使用的。

所以 空閒記憶體=free+buffers+chached=total-used

**:

LINUX 記憶體使用情況

顯示結果如下 mem 表示物理記憶體統計 total 記憶體總數 8057964kb used 已使用的記憶體 7852484kb free 空閒的記憶體數 205480kb shared 當前已經廢棄不用,總是0 buffers buffer 快取記憶體數 290432kb cached page...

linux 檢視記憶體使用情況

第一部分mem行 total 記憶體總數 1002m used 已經使用的記憶體數 769m free 空閒的記憶體數 232m shared 當前已經廢棄不用,總是0 buffers buffer 快取記憶體數 62m cached page 快取記憶體數 421m 關係 total 1002m ...

Linux檢視記憶體使用情況

linux檢視記憶體使用情況 free 檢視記憶體實際使用情況 total used free shared buffers cached mem 3934948 2998136 936812 0 52892 1397480 buffers cache 1547764 2387184 swap 0 ...