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

    文章

    156

    浏览量

    20462
  • Cache
    +关注

    关注

    0

    文章

    130

    浏览量

    29782
  • gcc编译器
    +关注

    关注

    0

    文章

    78

    浏览量

    4035

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    S32DS 3.5 内存映射视图在闪存擦除/写入后不更新问题怎么解决

    内存进行验证)。 S32DS 中的内存映射视图不会自动更新以反映这些更改。 我的问题是: 1)这是 S32DS 3.5 内存映射视图的已知问题吗? 2)有没有办法强制刷新,让
    发表于 04-15 08:26

    运行测试程序以读取通过受信任应用程序 (TA) 存储的安全 blob 时,内存不足怎么解决?

    使用给定密钥解密其中一些密钥。 它发生在执行至少 15 分钟后,TA 和 tee-os 没有错误日志(仅出现调试消息)。 我最初怀疑它来自内存泄漏,但由于缺乏来自 TA 和 tee-
    发表于 04-10 10:52

    飞凌嵌入式ElfBoard-进程进程状态

    信号;处于暂停态的进程是可以恢复进入到就绪态的,如收到 SIGCONT 信号;⚫Z (Zombie):退出状态,进程成为僵尸进程,僵尸态进程其实指的就是僵尸
    发表于 03-27 09:12

    飞凌嵌入式ElfBoard-环境变量之删除清空环境变量environ

    导致无法再访问环境变量,但也不会释放之前分配的内存,这可能也会造成内存泄漏。直接将 environ 赋值为 NULL 是一种粗暴的清空方式,尽管这种操作只会影响当前进程及其子
    发表于 03-26 10:23

    飞凌嵌入式ElfBoard-进程之什么是进程

    进程是正在执行(已经开始执行但还没终止的)的程序实例,执行程序时,内核会将程序载入虚拟内存,为程序变量分配空间,建立内核记账(bookkeeping)数据结构,以记录与进程有关的各种信息(比如,
    发表于 01-26 08:42

    光纤收发器有没有正反?一文讲清配对使用要点,广州邮科专业解答!

    在工业通信、安防监控、智能楼宇等项目部署中, 光纤收发器 作为光电转换的核心设备,被广泛应用。但很多新手工程师或集成商常会疑惑:“ 光纤收发器 有没有正反? ”“能不能随便配对使用?”今天,我们
    的头像 发表于 01-15 10:40 324次阅读
    光纤收发器<b class='flag-5'>有没有</b>正反?一文讲清配对使用要点,广州邮科专业解答!

    进程通信

    直接把消息发送给接收进程,并将它挂在接收进程的消息缓冲队列上,接收进程从消息缓冲队列中取得消息。   2) 间接通信方式:发送进程把消息发送到某个
    发表于 01-15 06:16

    进程的控制

    所期待的事件出现时,如它所启动的I/O操作已完成或其所期待的数据已到达,则由有关进程(比如,提供数据的进程)调用唤醒原语(Wakeup),将等待该事件的进程唤醒。   唤醒原语的执行
    发表于 01-15 06:05

    解析Linux的进程、线程和协程

    一、基础概念 进程(Process) 进程是计算机中运行的程序的实例,它是操作系统中最基本的执行单元之一。每个进程都有自己的独立内存空间、系统资源和代码执行流。这意味着一个
    发表于 12-22 11:00

    使用w5500通信使用wiz包的时候,突然拔掉网线,如何释放网络资源?

    也就越多。也就是在拔掉网线之后调用closesocket并没有释放网络资源。这个时候再次接入网线,就无法继续通信了。需要重启w5500。但是重启w5500也无法解决内存泄漏的问题。 有没有
    发表于 10-11 09:01

    at_device 包 ml307长时间运行有内存泄漏问题怎么解决?

    使用 at_device 包中的 ml307 包长时间运行有大量内存泄漏问题,大概涨了20K,求助解决。
    发表于 09-24 07:41

    rtthread线程出现异常了,有没有什么钩子函数能够定义用户操作?

    线程出现异常了,有没有什么钩子函数能够定义用户操作????
    发表于 09-18 06:36

    瑞芯微3576,使用FP16模型进行训练,瑞芯微官方接口概率崩溃

    corrupted。之前使用INT8的模型没出现过这个错误。使用的是model_zoo中的aarch64下的librknnrt.so。未崩溃时能正常检测,可以确认崩溃前没有内存
    发表于 07-17 13:25

    想问下怎么查看安卓系统有没有VPU驱动?

    购买了一个CPU是RK3576, android 14 的机顶盒,能通过adb查看有没有VPU驱动么?查看哪些信息来确认过?
    发表于 07-01 09:10

    在OpenVINO™ C++代码中启用 AddressSanitizer 时的内存泄漏怎么解决?

    在 OpenVINO™ C++代码中启用 AddressSanitizer 时遇到内存泄漏: \"#0 0xaaaab8558370 in operator new(unsigned
    发表于 06-23 07:16