FREESWITCH系列之内存泄漏排查总结

本文记录了作者从一无所知到解决FreeSWITCH内存泄漏问题的心路历程。通过使用多种工具排查,最终发现泄漏源并修复。涉及内存管理、日志分析及底层代码优化。

心路历程

1.懵逼状态

在接到这个任务的时候,对FreeSwitch处于一问三不知的情况,不了解FreeSwitch的业务,不了解流程,更要不要说代码了。但是还是硬着头皮上了,原本以为是个短期接触战,没想到被自己搞成了持久战。回过来头看,一开始对任务的难度还是低估了,没有做好持久战的准备。

2.无头苍蝇状态

在接到任务后,在没有先去了解业务的情况下,就开始了各种尝试。

工具1:valgrind,跑了一段时间后,除了输出一堆无用的垃圾外,没什么用

工具2:fmpool,开源的工具,使用该工具后,性能下降明显,需要跑较长时间,才能输出一些有用的信息

工具3:gperftool,google开源的工具,使用该工具,同样性能也下降了,也需要跑较长时间,但是输出的信息很有用。可以明显的看到泄漏路径。

但是拿到这个内存泄漏图后,不了解底层代码的情况,根本看不懂。更不要说如何修改了。

3.走了弯路

在选择内存泄漏排查工具的过程中,还是走了一些弯路。一度怀疑是内存空洞造成的内存泄漏。然后看明面上的freeswitch日志,以为是视频通话场景下,分配了大量的jitter_buffer造成的内存空洞,然后导致了泄漏。在这个方向上,浪费了很多时间。

唯一的收获是了解了apr库内存池的使用,以及排除了session和channel层内存泄漏的可能性。

4.走进sofia-sip底层

后面XX告诉我84环境freeswitch有内存泄漏的情况,用上了gperftool后,输出的内存泄漏路径都在sofia-sip库。但是底层代码没人熟悉,只能沉下来心来,去啃这块硬骨头了。

5.抓注重点

在梳理内存泄漏路径的过程中,发现sofia-sip库的内存分配是基于Home-base的内存分配机制。什么意思?就是sofia-sip库的内存分配,会先分配一个home的内存,然后需要再次分配内存的时候,通过这个home来分配,释放的时候也有home来释放。所以只要抓注su_home_new和su_home_deinit,就抓注了内向泄漏的重点了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值