0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎么确认某个进程有没有出现内存泄漏

工程师邓生 来源:嵌入式Linux 作者:山岳 2022-09-16 17:57 次阅读

是今天和朋友讨论的问题,用free看到的内存在减少,但是看/proc/meminfo 的可用内存却没有减少,但是实际情况是他们的应用跑着跑着内存最后就消耗完了,难搞的是复现需要十来天。

f55eb614-3576-11ed-ba43-dac502259ad0.png


f578da26-3576-11ed-ba43-dac502259ad0.png

meminfo里面的memavailable 属性表示的是可以用的内存大小,它是估计出来的值,并不是一个准确值。

f5985702-3576-11ed-ba43-dac502259ad0.png  


那如果我想确认某个进程有没有出现内存泄漏,我要怎么确认? 这类问题我一般是遇到的时候才会去分析,进程一般会有自己的进程号,比较简单的办法就是用top -p进程号判断。

也可以去看/proc//status里面的VMRSS属性

实例:


pYYBAGMkSNeAZrq3AABy6MLToQ8052.jpg

运行:

gccmemory.c && a.out

查看属性:

f5f32498-3576-11ed-ba43-dac502259ad0.png

free 看到的内存信息是从meminfo里面解析出来的,所以要看系统的具体内存占用,还是要看meminfo,但是meminfo里面有很多很多属性,很少有人能够非常明白的说明清楚。

我尝试说下几个通常见到的

MemTotal

这是内存条大小的容量,但是我们往往看到这个值和我们的内存条大小不同,比如,硬件设计的时候告诉我们使用的内存条大小是2GB,实际上这里可能不是2GB,那是因为系统是开机的时候在bootloader,或者其他部分占用了一部分。

f960c7c0-3576-11ed-ba43-dac502259ad0.png

MemFree

系统剩余内存大小,MemTotal - MemFree 就是已经使用的内存大小。

MemAvailable

这是一个估算值,并不是精确值。

我们看到的剩余内存MemFree大小,并不是我们系统应用程序可以分配的内存大小,系统中存在的缓存cache/buffer、slab回收内存系统可以从其他地方抠一些内存出来再加上MemFree就等于MemAvailable,应用程序就可以判断这个数值判断自己应该申请的内存空间。



审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内存条
    +关注

    关注

    0

    文章

    127

    浏览量

    19278
  • Cache
    +关注

    关注

    0

    文章

    127

    浏览量

    27981
  • gcc编译器
    +关注

    关注

    0

    文章

    77

    浏览量

    3233

原文标题:我的内存去哪了?

文章出处:【微信号:嵌入式与Linux那些事,微信公众号:嵌入式与Linux那些事】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言内存泄漏问题原理

    内存泄漏问题只有在使用堆内存的时候才会出现,栈内存不存在内存
    发表于 03-19 11:38 163次阅读
    C语言<b class='flag-5'>内存</b><b class='flag-5'>泄漏</b>问题原理

    内存溢出与内存泄漏:定义、区别与解决方案

    内存溢出与内存泄漏:定义、区别与解决方案  内存溢出和内存泄漏是计算机科学中常见的问题,在开发和
    的头像 发表于 12-19 14:10 1266次阅读

    线程内存泄漏问题的定位

    在下降。确定内存泄漏确实存在。top中可以显示多种形式内存,进而可以判断是那种泄漏。比如vss/rss/pss等。 确定哪个进程
    的头像 发表于 11-13 11:38 322次阅读
    线程<b class='flag-5'>内存</b><b class='flag-5'>泄漏</b>问题的定位

    如何写一个内存泄漏检测工具

    如何确定有内存泄露问题,如何定位到内存泄露位置,如何写一个内存泄漏检测工具? 1:概述 内存泄露本质:其实就是申请调用malloc/new,
    的头像 发表于 11-11 16:19 518次阅读

    内存泄漏会产生哪些后果

    ,只释放了p1,没有释放p2,产生了内存泄漏内存泄漏会产生哪些后果? 随着程序运行时间越来越久,内存
    的头像 发表于 11-10 15:06 393次阅读
    <b class='flag-5'>内存</b><b class='flag-5'>泄漏</b>会产生哪些后果

    内存泄漏如何避免

    1. 内存溢出 内存溢出 OOM (out of memory),是指程序在申请内存时,没有足够的内存空间供其使用,
    的头像 发表于 11-10 11:04 375次阅读
    <b class='flag-5'>内存</b><b class='flag-5'>泄漏</b>如何避免

    什么是频谱泄漏?为什么会出现频谱泄漏?如何最小化频谱泄漏

    在数字信号处理领域,快速傅里叶变换(FFT)可以说是其核心内容之一。在利用FFT分析信号频谱的过程中,不可避免地会出现频谱泄漏现象,因此,我们所观察到的信号频谱只是其真实频谱的近似,为了减少二者之间
    的头像 发表于 11-03 18:08 5381次阅读
    什么是频谱<b class='flag-5'>泄漏</b>?为什么会<b class='flag-5'>出现</b>频谱<b class='flag-5'>泄漏</b>?如何最小化频谱<b class='flag-5'>泄漏</b>?

    什么是内存泄漏?如何避免JavaScript内存泄漏

    JavaScript 代码中常见的内存泄漏的常见来源: 研究内存泄漏问题就相当于寻找符合垃圾回收机制的编程方式,有效避免对象引用的问题。
    发表于 10-27 11:30 128次阅读
    什么是<b class='flag-5'>内存</b><b class='flag-5'>泄漏</b>?如何避免JavaScript<b class='flag-5'>内存</b><b class='flag-5'>泄漏</b>

    高级内存调试和泄漏检测1.0版

    它可以回答的问题和可以解决的问题包括: ·我使用了多少内存? ·我的代码中哪些部分分配的内存最多? ·是否存在内存泄漏--我在哪里没有释放
    发表于 08-28 08:05

    细说Linux内存泄漏检测实现原理与实现

    在使用没有垃圾回收的语言时(如 C/C++),可能由于忘记释放内存而导致内存被耗尽,这叫 内存泄漏。由于内核也需要自己管理
    发表于 07-03 09:22 336次阅读
    细说Linux<b class='flag-5'>内存</b><b class='flag-5'>泄漏</b>检测实现原理与实现

    Linux内存泄漏检测实现原理与实现

    在使用没有垃圾回收的语言时(如 C/C++),可能由于忘记释放内存而导致内存被耗尽,这叫 内存泄漏
    的头像 发表于 07-03 09:21 425次阅读
    Linux<b class='flag-5'>内存</b><b class='flag-5'>泄漏</b>检测实现原理与实现

    记一次Rust内存泄漏排查之旅

    在某次持续压测过程中,我们发现 GreptimeDB 的 Frontend 节点内存即使在请求量平稳的阶段也在持续上涨,直至被 OOM kill。我们判断 Frontend 应该是有内存泄漏了,于是开启了排查
    的头像 发表于 07-02 11:52 418次阅读
    记一次Rust<b class='flag-5'>内存</b><b class='flag-5'>泄漏</b>排查之旅

    嵌入式开发如何预防内存泄漏呢?

    最近部门不同产品接连出现内存泄漏导致的网上问题,具体表现为单板在现网运行数月以后,因为内存耗尽而导致单板复位现象。
    发表于 06-18 10:21 274次阅读
    嵌入式开发如何预防<b class='flag-5'>内存</b><b class='flag-5'>泄漏</b>呢?

    怎么解决C语言中的内存泄漏问题呢?

    只有在堆内存里面才会发生内存泄漏的问题,在栈内存中不会发生内存泄漏。因为栈
    发表于 06-11 17:31 392次阅读
    怎么解决C语言中的<b class='flag-5'>内存</b><b class='flag-5'>泄漏</b>问题呢?

    有没有办法在MPC5744P中为每个应用程序配置一个内存区域而不必为每个区域设置进程ID ?

    你好 有没有办法在MPC5744P中为每个应用程序配置一个内存区域而不必为每个区域设置进程ID ?
    发表于 05-05 07:25