嵌入式 linux 檢視記憶體

2021-09-07 01:58:07 字數 4470 閱讀 8227

在windows系統中檢視記憶體

[root@scs-2 tmp]# free

total used free shared buffers cached

mem: 3266180 3250004 16176 0 110652 2668236

-/+ buffers/cache: 471116 2795064

swap: 2048276 80160 1968116

下面是對這些數值的解釋:

total:總計物理記憶體的大小。

used:已使用多大。

free:可用有多少。

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

buffers/cached:磁碟快取的大小。

第三行(-/+ buffers/cached):

used:已使用多大。

free:可用有多少。

第四行就不多解釋了。

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

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

如上例:

2795064=16176+110652+2668236

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

如何看額定值:

cat /proc/meminfo

[root@scs-2 tmp]# cat /proc/meminfo

memtotal: 3266180 kb

memfree: 17456 kb

buffers: 111328 kb

cached: 2664024 kb

swapcached: 0 kb

active: 467236 kb

inactive: 2644928 kb

hightotal: 0 kb

highfree: 0 kb

lowtotal: 3266180 kb

lowfree: 17456 kb

swaptotal: 2048276 kb

swapfree: 1968116 kb

dirty: 8 kb

writeback: 0 kb

slab: 112344 kb

committed_as: 535292 kb

pagetables: 2340 kb

vmalloctotal: 536870911 kb

vmallocused: 272696 kb

vmallocchunk: 536598175 kb

hugepages_total: 0

hugepages_free: 0

hugepagesize: 2048 kb

用free -m檢視的結果:

[root@scs-2 tmp]# free -m

total used free shared buffers cached

mem: 3189 3173 16 0 107 2605

-/+ buffers/cache: 460 2729

swap: 2000 78 1921

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

[root@scs-2 tmp]# ll -h /proc/kcore

-r——– 1 root root 4.1g jun 12 12:04 /proc/kcore

備註:占用記憶體的測量

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

/proc/meminfo 機器的記憶體使用資訊

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

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

[root@localhost ~]# cat /proc/self/statm

654 57 44 0 0 334 0

輸出解釋

cpu 以及cpu0。。。的每行的每個引數意思(以第一行為例)為:

引數 解釋 /proc//status

size (pages) 任務虛擬位址空間的大小 vmsize/4

resident(pages) 應用程式正在使用的物理記憶體的大小 vmrss/4

shared(pages) 共享頁數 0

trs(pages) 程式所擁有的可執行虛擬記憶體的大小 vmexe/4

lrs(pages) 被映像到任務的虛擬記憶體空間的庫的大小 vmlib/4

drs(pages) 程式資料段和使用者態的棧的大小 (vmdata+ vmstk )4

dt(pages) 04

檢視機器可用記憶體

/proc/28248/>free

total used free shared buffers cached

mem: 1023788 926400 97388 0 134668 503688

-/+ buffers/cache: 288044 735744

swap: 1959920 89608 1870312

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

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

$ 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行中的free + buffers + cached,並不是只有free部分)

第三部分是指交換分割槽, 我想不講大家都明白.

我想大家看了上面,還是很暈.第一部分(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看記憶體是否夠用的標準哦.

補充:cat /proc/meminfo

可以檢視記憶體的詳細使用情況,free的結果由此檔案生成。

Linux嵌入式學習 共享記憶體

3.測試 共享記憶體是程序間通訊中最簡單的方式之一。共享記憶體允許兩個或更多程序訪問同一塊記憶體,就如同 malloc 函式向不同程序返回了指向同乙個物理記憶體區域的指標。當乙個程序改變了這塊位址中的內容的時候,其它程序都會察覺到這個更改。標頭檔案 include include 原型 int sh...

嵌入式記憶體布局

從事手機平台研發也有一年多了,總結了一下有關手機記憶體方面的知識希望對新手有所裨益。如果有高手路過檢視之餘如有紕漏之處還請不吝賜教 說明 傳統 燒機 流程將軟體燒錄到flash中,軟體bootloader部分在nor flash中,軟體的其他部分燒錄到nand flash 強調一點 上圖左邊部分是f...

嵌入式系統 記憶體管理

教材 嵌入式系統及應用,羅蕾 李允 陳麗蓉等,電子工業出版社 嵌入式實時作業系統在記憶體管理方面需要考慮如下因素 快速而確定的記憶體管理 通常的作業系統都至少具有基本的記憶體管理方法 提供記憶體分配與釋放的系統呼叫 不使用虛擬儲存技術 在嵌入式實時作業系統中一般不使用虛擬儲存技術,以避免頁面置換所帶...