FreeSwitch inbound 模式,CPU过载问题分析解决
博客专区 > attobit 的博客 > 博客详情
FreeSwitch inbound 模式,CPU过载问题分析解决
attobit 发表于1年前
FreeSwitch inbound 模式,CPU过载问题分析解决
  • 发表于 1年前
  • 阅读 204
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

摘要: 本文对FreeSwitch 使用 Event Socket过程中出现的CPU过载问题给出分析及解决办法。

现象:外部程序使用ESL通过inbound模式与FreeSwitch交互,出现FreesSwitch进程CPU过载。      

分析:
通过gdb attach到FreesSwitch进程,查看各线程的backtrace
分析bt结果,看到很多event socket的线程执行到read_packet函数中进行poll操作

        #0  0x00007fe6ba71f043 in poll () from /lib64/libc.so.6
        #1  0x00007fe6bcb539c5 in apr_poll () at poll/unix/poll.c:117
        #2  0x00007fe6bca5e5c3 in switch_poll () at src/switch_apr.c:973
        #3  0x00007fe6b4c1950e in read_packet () at mod_event_socket.c:1449
        #4  0x00007fe6b4c1e8bc in listener_run () at mod_event_socket.c:2667
        #5  0x00007fe6bb0279d1 in start_thread () from /lib64/libpthread.so.0
        #6  0x00007fe6ba72886d in clone () from /lib64/libc.so.6

event socket的线程数等于建立到8021端口的连接数
所以此时有两个问题,1连接数比预想多,2空闲连接poll操作占用CPU。

对于第一个问题,程序bug:
外部程序对于esl的handle没有做重复的初始化,而esl_connect()函数对于handle入参也没有做初始化处理。导致socket没有在esl_disconnect时真正的释放。


对于第二个问题,可以通过如下修改,降低空闲连接占用CPU:
Patch代码:https://freeswitch.org/fisheye/changelog/freeswitch/?cs=e7f05b4

共有 人打赏支持
粉丝 0
博文 6
码字总数 1858
×
attobit
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: