Freeswitch的一个内存泄漏分析

在开发中,通过监控发现Freeswitch内存异常升高,尤其是在视频通话后。通过脚本和调试日志定位问题,使用sipp工具进行性能压测,确认了内存泄漏的存在。进一步分析发现,AKCS_ENABLE_RTP_CONFUSE宏的启用导致了内存泄漏,原因是通话结束时未正确解锁session。解决方案是确保每次通话后都解锁session,从而修复了内存泄漏问题。
摘要由CSDN通过智能技术生成

发现问题

在平常开发过程中,要做一个细心的人,不轻易放过任何一个问题。

这次发现Freeswitch的内存泄漏,是因为经常有关注测试环境的Freeswitch内存占用。

发现在测试环境升级的第二天Freeswitch内存就升到了200-300M,非常异常!

 

观察问题

使用脚本定时统计Freeswitch的内存占用,同时打开Freeswitch的调试开关。

export TPORT_DUMP=/usr/local/freeswitch/log/tport_sip.log

输出Freeswitch收到和发出信令包的日志。

通过观察发现,Freeswitch内存占用升高时,大部分是发起了视频通话

 

复现问题

通过sipp工具,在开发环境做视频通话的性能压测,发现100个视频通话后,Freeswitch内存占用就到了200多M,妥妥的是内存泄漏了

/usr/local/cloud_monitor/sipp/sipp_3.5.1  -t t1 -m 10 -i 172.18.41.220 -sf test/reg_tcp.xml -inf test/uas1.csv -p 6168 39.108.105.163:5070 -trace_err -trace_screen -timeout 60

/usr/local/cloud_monitor/sipp/sipp_3.5.1  -t t1 -aa -i 172.18.41.220 -sf test/video_pcmuuas.xml -inf test/uas1.csv -p 6168 39.108.105.163:5070 39.108.105.163:5070 -trace_err -trace_screen -timeout 3000

/usr/local/cloud_monitor/sipp/sipp_3.5.1 -t t1 -m 100  -r 1 -i 172.18.41.220 -sf test/video_pcmuuac.xml -inf test/uac1.csv -p 6167 39.108.105.163:5070 39.108.105.163:5070 -trace_err -trace_screen -timeout 3000

 

定位问题

先注释掉freeswitch-1.6.17\src\include\akuvox.h所有的宏,重新编译Freeswitch。

然后通过sipp工具做视频通话压测,发现没有泄漏。

然后再依次添加AKCS_ADD_PRIMARY_KEY宏,

AKCS_ENABLE_RTP_CONFUSE宏 等,测试Freeswitch有没有内存泄漏。
最后定位到是AKCS_ENABLE_RTP_CONFUSE的修改引起。
 

 

 

解决问题

正常通话是没有走RTP-CONFUSE分支的,所以左边的代码没有走到switch_core_session_rwunlock,导致other_session没有被释放,最终导致内存泄漏。

解决方法就是不管有没有走RTP-CONFUSE,都要解锁session。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值