是今天和朋友討論的問題,用free看到的內存在減少,但是看/proc/meminfo 的可用內存卻沒有減少,但是實際情況是他們的應用跑著跑著內存最后就消耗完了,難搞的是復現需要十來天。

meminfo里面的memavailable 屬性表示的是可以用的內存大小,它是估計出來的值,并不是一個準確值。
?
那如果我想確認某個進程有沒有出現內存泄漏,我要怎么確認? 這類問題我一般是遇到的時候才會去分析,進程一般會有自己的進程號,比較簡單的辦法就是用top -p進程號判斷。
也可以去看/proc/
實例:

運行:
gccmemory.c && a.out
查看屬性:

free 看到的內存信息是從meminfo里面解析出來的,所以要看系統的具體內存占用,還是要看meminfo,但是meminfo里面有很多很多屬性,很少有人能夠非常明白的說明清楚。
我嘗試說下幾個通常見到的
MemTotal
這是內存條大小的容量,但是我們往往看到這個值和我們的內存條大小不同,比如,硬件設計的時候告訴我們使用的內存條大小是2GB,實際上這里可能不是2GB,那是因為系統是開機的時候在bootloader,或者其他部分占用了一部分。
MemFree
系統剩余內存大小,MemTotal - MemFree 就是已經使用的內存大小。
MemAvailable
這是一個估算值,并不是精確值。
我們看到的剩余內存MemFree大小,并不是我們系統應用程序可以分配的內存大小,系統中存在的緩存cache/buffer、slab回收內存系統可以從其他地方摳一些內存出來再加上MemFree就等于MemAvailable,應用程序就可以判斷這個數值判斷自己應該申請的內存空間。
審核編輯:劉清
-
內存條
+關注
關注
0文章
153瀏覽量
20415 -
Cache
+關注
關注
0文章
130瀏覽量
29707 -
gcc編譯器
+關注
關注
0文章
78瀏覽量
3987
原文標題:我的內存去哪了?
文章出處:【微信號:嵌入式與Linux那些事,微信公眾號:嵌入式與Linux那些事】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
飛凌嵌入式ElfBoard-進程之什么是進程
光纖收發器有沒有正反?一文講清配對使用要點,廣州郵科專業解答!
進程概念和特征
進程的控制
解析Linux的進程、線程和協程
使用w5500通信使用wiz包的時候,突然拔掉網線,如何釋放網絡資源?
請問有沒有用uboot引導啟動過rtthread-smart的?
at_device 包 ml307長時間運行有內存泄漏問題怎么解決?
瑞芯微3576,使用FP16模型進行訓練,瑞芯微官方接口概率崩潰
在OpenVINO? C++代碼中啟用 AddressSanitizer 時的內存泄漏怎么解決?
golang內存分配
怎么確認某個進程有沒有出現內存泄漏
評論