[转载]使用valgrind分析内存泄漏(实例)
(2018-09-20 16:18:01)
标签:
转载 |
Valgrind是一个分析内存泄漏非常好用的工具,一般linux设备上都有预装,通过一个实例简单跟大家分享一下。
首先,必须使moov_generator启动在终端,不能通过daemon方式后台启动,Valgrind命令及执行结果如下。
[root@ h264_streamd]# valgrind
--tool=memcheck --leak-check=full --show-reachable=yes
./moov_generator -l4
moov_generator运行起来了,和以往不同的是运行在valgrind的环境下。
moov_generator只有在真正干活的时候,才有可能出现那么大的内存泄漏,为了模拟真实的拖拽操作,在另外一台设备上固定host,使用wget抓取:
[root@svn ~]# wget -SO /dev/null http://www.zhoudshu.cn/html/qq/qq.mp4?start=100
--14:32:15--
正在解析主机 www.zhoudshu.cn... 192.168.100.185
Connecting to www.zhoudshu.cn|192.168.100.185|:80... 已连接。
已发出 HTTP 请求,正在等待回应...
长度:1,473,318 (1.4M) [text/plain]
100%[=================================================================================>]
1,473,318
14:32:15 (62.91 MB/s) - `/dev/null'
saved [1473318/1473318]
拖拽操作正常,已经走到moov_generator的流程里了,在启动valgrind的终端按下ctrl +c 中断moov_generator,valgrind打出以下信息(为了让大家看到主要内容,我去的了一些无关紧要的信息):
…………………
==13137== 80 bytes in 4 blocks are definitely lost in loss record 1 of 4
==13137==
==13137==
==13137==
==13137==
==13137==
==13137==
==13137==
==13137==
==13137==
==13137==
==13137== 80 bytes in 4 blocks are definitely lost in loss record 2 of 4
==13137==
==13137==
==13137==
==13137==
==13137==
==13137==
==13137==
==13137==
==13137==
==13137==
==13137== 352 bytes in 1 blocks are still reachable in loss record 3 of 4
==13137==
==13137==
==13137==
==13137==
==13137==
==13137==
==13137==
==13137== 408 bytes in 3 blocks are possibly lost in loss record 4 of 4
==13137==
==13137==
==13137==
/lib/tls/libpthread-2.3.4.so)
==13137==
==13137==
==13137== LEAK SUMMARY:
==13137==
==13137==
==13137==
==13137==
“definitely lost”是非常明确的内存泄漏点。
==13137==
==13137==
可以很明确看到
1.在trak_build_index函数中调用的malloc没有释放。
2.writepidFile时一次文件没有关闭。