当前位置: 技术问答>linux和unix
程序运行内存泄漏问题
来源: 互联网 发布时间:2016-06-10
本文导语: 自己写的一个服务程序,负责任务的调度。 运行时察看/proc/pid/status,情况如下: 开始的时候(0个任务) 调度过若干任务后(所有任务执行完毕,还是0个任务) VmSize: 70844 KB ...
自己写的一个服务程序,负责任务的调度。
运行时察看/proc/pid/status,情况如下:
开始的时候(0个任务) 调度过若干任务后(所有任务执行完毕,还是0个任务)
VmSize: 70844 KB 78320 KB
VmRSS: 15984 KB 22000 KB
VmData: 33572 KB 39492 KB
VmStk: 448 KB 1912 KB
VmLib: 65304 KB 65524 KB
是不是内存泄漏了7476KB,其中在栈上(new分配)泄漏了1474KB?
还有没有通过new分配的内存怎么会存在泄漏呢?
小弟先谢过了!
运行时察看/proc/pid/status,情况如下:
开始的时候(0个任务) 调度过若干任务后(所有任务执行完毕,还是0个任务)
VmSize: 70844 KB 78320 KB
VmRSS: 15984 KB 22000 KB
VmData: 33572 KB 39492 KB
VmStk: 448 KB 1912 KB
VmLib: 65304 KB 65524 KB
是不是内存泄漏了7476KB,其中在栈上(new分配)泄漏了1474KB?
还有没有通过new分配的内存怎么会存在泄漏呢?
小弟先谢过了!
|
|
重磅介绍一款 查内泄的软件 valgrind (free software)
套葛优的一句话:“用过都说好”
用法:
valgrind -q --check-leak=full --log-file=dump.file ./exe
tail -f dump.file
套葛优的一句话:“用过都说好”
用法:
valgrind -q --check-leak=full --log-file=dump.file ./exe
tail -f dump.file
|
恩,valgrind是很不错的内存泄漏分析工具,可以试一下。
|
为什么你觉得是内存泄漏?
而不是call function的压栈呢?
而不是call function的压栈呢?
|
* VmSize:
虚拟内存大小。
整个进程使用虚拟内存大小,是VmLib, VmExe, VmData, 和 VmStk的总和。
* VmLck:
虚拟内存锁。
进程当前使用的并且加锁的虚拟内存总数
* VmRSS:
虚拟内存驻留集合大小。
这是驻留在物理内存的一部分。它没有交换到硬盘。它包括代码,数据和栈。
* VmData:
虚拟内存数据。
堆使用的虚拟内存。
* VmStk:
虚拟内存栈
栈使用的虚拟内存
* VmExe:
可执行的虚拟内存
可执行的和静态链接库所使用的虚拟内存
* VmLib:
虚拟内存库
动态链接库所使用的虚拟内存
http://hi.baidu.com/luoluo0722/blog/item/3fdcc1b1d369ad50092302e6.html
从上面的链接来看,data才是堆,new应该是从这里分配的吧。
|
我最近使用google的tc-malloc来做内存profile效果不错。
|
内存查漏工具网上很多