概述
发现问题
在平常开发过程中,要做一个细心的人,不轻易放过任何一个问题。
这次发现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.17srcincludeakuvox.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。
最后
以上就是魁梧星月为你收集整理的Freeswitch的一个内存泄漏分析发现问题观察问题复现问题定位问题解决问题的全部内容,希望文章能够帮你解决Freeswitch的一个内存泄漏分析发现问题观察问题复现问题定位问题解决问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复