是今天和朋友討論的問(wèn)題,用free看到的內(nèi)存在減少,但是看/proc/meminfo 的可用內(nèi)存卻沒有減少,但是實(shí)際情況是他們的應(yīng)用跑著跑著內(nèi)存最后就消耗完了,難搞的是復(fù)現(xiàn)需要十來(lái)天。
meminfo里面的memavailable 屬性表示的是可以用的內(nèi)存大小,它是估計(jì)出來(lái)的值,并不是一個(gè)準(zhǔn)確值。
?
那如果我想確認(rèn)某個(gè)進(jìn)程有沒有出現(xiàn)內(nèi)存泄漏,我要怎么確認(rèn)? 這類問(wèn)題我一般是遇到的時(shí)候才會(huì)去分析,進(jìn)程一般會(huì)有自己的進(jìn)程號(hào),比較簡(jiǎn)單的辦法就是用top -p進(jìn)程號(hào)判斷。
也可以去看/proc/
實(shí)例:
運(yùn)行:
gccmemory.c && a.out
查看屬性:
free 看到的內(nèi)存信息是從meminfo里面解析出來(lái)的,所以要看系統(tǒng)的具體內(nèi)存占用,還是要看meminfo,但是meminfo里面有很多很多屬性,很少有人能夠非常明白的說(shuō)明清楚。
我嘗試說(shuō)下幾個(gè)通常見到的
MemTotal
這是內(nèi)存條大小的容量,但是我們往往看到這個(gè)值和我們的內(nèi)存條大小不同,比如,硬件設(shè)計(jì)的時(shí)候告訴我們使用的內(nèi)存條大小是2GB,實(shí)際上這里可能不是2GB,那是因?yàn)橄到y(tǒng)是開機(jī)的時(shí)候在bootloader,或者其他部分占用了一部分。
MemFree
系統(tǒng)剩余內(nèi)存大小,MemTotal - MemFree 就是已經(jīng)使用的內(nèi)存大小。
MemAvailable
這是一個(gè)估算值,并不是精確值。
我們看到的剩余內(nèi)存MemFree大小,并不是我們系統(tǒng)應(yīng)用程序可以分配的內(nèi)存大小,系統(tǒng)中存在的緩存cache/buffer、slab回收內(nèi)存系統(tǒng)可以從其他地方摳一些內(nèi)存出來(lái)再加上MemFree就等于MemAvailable,應(yīng)用程序就可以判斷這個(gè)數(shù)值判斷自己應(yīng)該申請(qǐng)的內(nèi)存空間。
審核編輯:劉清
-
內(nèi)存條
+關(guān)注
關(guān)注
0文章
145瀏覽量
19544 -
Cache
+關(guān)注
關(guān)注
0文章
129瀏覽量
28363 -
gcc編譯器
+關(guān)注
關(guān)注
0文章
78瀏覽量
3399
原文標(biāo)題:我的內(nèi)存去哪了?
文章出處:【微信號(hào):嵌入式與Linux那些事,微信公眾號(hào):嵌入式與Linux那些事】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論