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

    文章

    145

    浏览量

    19519
  • Cache
    +关注

    关注

    0

    文章

    129

    浏览量

    28343
  • gcc编译器
    +关注

    关注

    0

    文章

    78

    浏览量

    3382

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

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

收藏 人收藏

    评论

    相关推荐

    虚拟内存溢出该怎么处理 虚拟内存在服务器中的应用

    在现代计算机系统中,虚拟内存是一种重要的资源管理威廉希尔官方网站 ,它允许系统使用硬盘空间来扩展物理内存的容量。然而,当系统运行的程序和进程超出了物理内存和虚拟
    的头像 发表于 12-04 09:49 151次阅读

    什么是泄漏电流试验?

    泄漏电流的概念泄漏电流(leakagecurrent)也叫接触电流,是指在没有故障施加电压的情况下,电气中相互绝缘的金属零件之间,或带电零件与接地零件之间,通过其周围介质或绝缘表面所形成的电流。
    的头像 发表于 11-26 11:48 299次阅读
    什么是<b class='flag-5'>泄漏</b>电流试验?

    内存管理的硬件结构

    常见的内存分配函数有malloc,mmap等,但大家有没有想过,这些函数在内核中是怎么实现的?换句话说,Linux内核的内存管理是怎么实现的?
    的头像 发表于 09-04 14:28 316次阅读
    <b class='flag-5'>内存</b>管理的硬件结构

    LM393输入电流有没有限制?在输入脚输入3mA的电流进去有没有问题?

    在使用LM393时,请帮忙确认下是否可以? 1)LM393输入电流有没有限制?在输入脚输入3mA的电流进去有没有问题? 2)如附件电路图,可以理解为3.3V经过1.5K的电阻直接进去LM393的3脚,看看
    发表于 08-19 08:06

    如何检测内存泄漏

    检测内存泄漏是软件开发过程中一项至关重要的任务,它有助于识别和解决那些导致程序占用过多内存资源,从而影响程序性能甚至导致程序崩溃的问题。以下将详细阐述几种常见的内存
    的头像 发表于 07-30 11:50 1881次阅读

    求助,有没有espconn_secure_abort函数?

    我发现用espconn_abort函数断开ssl连接,会导致内存泄漏有没有espconn_secure_abort函数?
    发表于 07-22 08:05

    NONOS 1.5.3/1.5.4 SSL内存泄漏的原因?

    我已经通过随附的代码验证了当发生 SSL 握手错误时,会生成内存泄漏 此外,espconn_reconnect_callback不称为信令ESPCONN_HANDSHAKE - TCP SSL 握手
    发表于 07-18 07:24

    使用system_show_malloc()检查内存泄漏遇到异常怎么解决?

    我想使用system_show_malloc()检查内存泄漏,但是当我调用该函数时,我得到了致命的异常: 致命异常 28 (LoadProhibitedCause): epc1
    发表于 07-10 06:32

    linux下查询进程占用的内存方法有哪些?

    linux下查询进程占用的内存方法
    发表于 04-08 06:03

    有没有什么办法能重置DMA转移数据到内存的指针?

    有没有什么办法能重置DMA转移数据到内存的指针,看芯片手册没找到相关功能的寄存器,就比如用DMA接收串口数据,本来固定接收100个,某次只发了50个就断开了,这时候就需要把DAM数据转移的指针重置一下
    发表于 03-26 06:14

    C语言内存泄漏问题原理

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

    【鸿蒙】webview内存泄漏问题的分析报告

    1 关键字 webview;内存泄漏 2 问题描述 问题现象:在 3.1release 版本和 3.2bete1 版本中,在 RK3568 上使用 etsWeb 和其他浏览器时,webview 所占
    的头像 发表于 03-02 15:12 2152次阅读

    贴片功率电感究竟有没有正负极之分

    电子发烧友网站提供《贴片功率电感究竟有没有正负极之分.docx》资料免费下载
    发表于 02-28 10:15 0次下载

    PSoC Creator有没有内存对齐方式的设置?

    使用PSoC4开发的时候发现ROM不够了,想做下优化,PSoC Creator有没有内存对齐方式的设置,比如说把对齐方式从4Byte改为2Byte?
    发表于 02-18 08:03

    拆解mmap内存映射的本质!

    mmap 进行文件映射的时候,是将进程虚拟内存空间中的某一段虚拟内存区域与磁盘中某个文件中的某段区域进行映射。
    的头像 发表于 01-24 14:30 1739次阅读
    拆解mmap<b class='flag-5'>内存</b>映射的本质!