利用smap进行内存泄漏分析

smap文件

smaps文件是Linux的proc文件系统提供的查看系统下运行进程内存使用情况的方法,Linux给每个进程都提供了一个这样的文件,学会查看并分析smaps文件有助于定位和解决诸如内存泄漏、性能瓶颈等内存资源相关问题

利用smap分析进程内存泄漏

测试程序

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
        printf("hellow memleak test\r\n");
        while(1)
        {
                char  * test = (char *)malloc(1024);
                memset(test,'1', 1024);
                sleep(1);
        }
}

代码申请每间隔1S申请一块1024Byte内存
持续打印进程smap文件

00afc000-00b3e000 rw-p 00000000 00:00 0          [heap]
Size:                264 kB
Rss:                 136 kB
Pss:                 136 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:         0 kB
Private_Dirty:       136 kB
Referenced:          136 kB
Anonymous:           136 kB
AnonHugePages:         0 kB
Swap:                  0 kB
KernelPageSize:        4 kB
MMUPageSize:           4 kB
Locked:                0 kB

间隔几分钟后打印
00afc000-00b5f000 rw-p 00000000 00:00 0          [heap]
Size:                396 kB
Rss:                 288 kB
Pss:                 288 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:         0 kB
Private_Dirty:       288 kB
Referenced:          288 kB
Anonymous:           288 kB
AnonHugePages:         0 kB
Swap:                  0 kB
KernelPageSize:        4 kB
MMUPageSize:           4 kB
Locked:                0 kB

结论

发现Size,Rss,Pss ,Private_Dirty,Referenced, Anonymous字段大小一直持续增长
Size:表示该映射区域在虚拟内存空间中的大小
Rss:驻留内存大小,是进程当前实际占用的物理内存大小,包括进程独自占用的物理内存、和其他进程共享的内存
Private_Dirty:已被改写的私有页面的大小。
referenced:当前能够被引用到的内存,以及当前可达的内存
Anonymous:表示当前没有与文件联系在一块的内存,也就是说没有作为交换
可以初步定位该进程存在内存泄漏,进而对其使用asan,Valgrind

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值