solaris下定位内存泄露的简单方法!

1. 在用户的.profile中加入如下脚本:
LD_PRELOAD_32=libumem.so.1:/usr/lib/extendedFILE.so.1:$LD_PRELOAD_32;
export LD_PRELOAD_32
UMEM_DEBUG=default;
export UMEM_DEBUG
UMEM_LOGGING=transaction;
export UMEM_LOGGING
UMEM_OPTIONS=backend=mmap;
export UMEM_OPTIONS

2. 重新执行一下上面的脚本:. .profile

3. 重启测试内存泄露的进程

4. 确认进程是否加在了lieumem库 pgrep $procname | xargs ldd | grep umem
若显示存在umem库,则表示加载成功

5. 执行操作,让内存涨起来, 然后用gcore收集core文件
gcore -o filename procid

6. 用mdb调试,收集泄露信息:
mdb filename(gcore出来的文件名称)
>$G
>::log result.log
>::findleaks -d
>c
>$q

7. 执行完毕之后,分析result.log文件

文件比较简单,可以清晰地看到堆栈和各个地方泄露点!



你可能感兴趣的:(C++,c,脚本,C#,Solaris)