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

    文章

    153

    浏览量

    20327
  • Cache
    +关注

    关注

    0

    文章

    130

    浏览量

    29605
  • gcc编译器
    +关注

    关注

    0

    文章

    78

    浏览量

    3915

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

    请问有没有用uboot引导启动过rtthread-smart的?

    通过uboot引导,在imx6ull开发板上启动rtthread-smart,通过thtp从网口下载到内存后,用go命令无法启动,且没有额外的打印消息,有没有遇到同样问题的?这个该怎么解决
    发表于 09-28 10:50

    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

    golang内存分配

    作者:钱文 Go 的分配采用了类似 tcmalloc 的结构.特点: 使用一小块一小块的连续内存页, 进行分配某个范围大小的内存需求. 比如某个连续 8KB 专门用于分配 17-24
    的头像 发表于 03-31 15:00 387次阅读
    golang<b class='flag-5'>内存</b>分配

    使用OpenVINO™进行推理时的内存泄漏怎么解决?

    使用 OpenVINO™ 进行推理时,内存会随着时间的推移而增加,并导致程序崩溃。
    发表于 03-06 08:29

    内存泄漏检测工具Sanitizer介绍

    内存泄漏,我们经常会遇到,如何检测内存泄漏,除了我们之前讲过的 valgrind,还可以使用 gcc 自带的工具 sanitizer。
    的头像 发表于 03-01 14:52 1468次阅读

    RK3588+DeepSeek有没有“搞头”?

    最近的当红炸子鸡DeepSeek,无论是行业内还是行业外都在研究。毕竟现在各行各业都想利用AI为自己服务,图像处理领域也不例外。于是便有很多人向我们咨询RK3588+DeepSeek有没有“搞头
    的头像 发表于 02-18 17:52 1532次阅读
    RK3588+DeepSeek<b class='flag-5'>有没有</b>“搞头”?

    电烙铁焊锡到底有没有

    电烙铁焊锡到底有没有毒?无铅?有铅? 电烙铁焊锡有毒吗? 有网友吐槽称,他在PCB工厂用电烙铁焊锡一年整了,都感觉到身体开始不舒服了,腹部有点胀,焊锡有毒吗?是不是会铅中毒。 其实这个还要看工作中
    的头像 发表于 02-12 09:27 4995次阅读

    分析C语言代码结构的设计问题

    来分析一个C语言代码结构的设计问题。 这段代码,使用了两次malloc,分别给 p1 和 p2 申请了内存。用完后,内存释放,防止内存泄漏。 大家觉得,这样的代码设计
    的头像 发表于 02-11 09:31 678次阅读

    怎么简单检测ADS8556有没有在工作?

    您好!我在使用ADS8556,给CONVST_x一个上升沿,是不是BUSY就一定会出现上升和下降的信号?或者怎么简单检测ADS8556有没有在工作?
    发表于 01-10 08:14

    深入解析Linux程序与进程

    关于某个数据集合的一次运行活动。作为系统进行资源分配和调度的基本单位,是操作系统结构的基础。 程序与进程的关系 进程的状态 基础进程状态 创建状态:
    的头像 发表于 12-18 11:01 840次阅读
    深入解析Linux程序与<b class='flag-5'>进程</b>