freeswitch的一个性能问题

概述

freeswitch是一款简单好用的VOIP开源软交换平台。

在fs的使用过程中,会遇到各种各样的问题,各种问题中,性能问题是最头疼的。

最近在测试某些场景的时候,压测会造成fs的内存占用持续升高,并在达到某个临界点的时候击溃fs的端口服务,导致全部sip呼叫响应503。

环境

centos:CentOS release 7.0 (Final)或以上版本

freeswitch:v1.10.7

GCC:4.8.5

起因

在问题发生后,通过对fs的模块、配置等进行排查,确定了几个方向。

方向1,日志写缓存。

方向2,呼叫session处理线程池。

方向3,端口启动数目。

经过测试和复现,方向锁定3端口启动数目。

测试方案

首先,在fs的conf/sip_profiles目录下生成1200个external****.xml文件,每个文件使用不同的端口号。

external9200.xml

<profile name="external9200">

...

<param name="sip-port" value="9200"/>

...

启动fs,使用sipp进行压测(脚本参见之前的文章)。

测试结果

启动fs后,没有呼叫的时候,已经占用了3.6G(46%)的内存。

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

20596 root -2 -10 17.1g 3.6g 8252 S 97.3 46.5 1:26.05 freeswitch

使用sipp-auto.py脚本进行并发测试。

测试呼叫跑满1小时。

20596 root -2 -10 18.5g 5.2g 3308 S 121.6 68.6 15:11.83 freeswitch

测试呼叫经过3个小时。

20596 root -2 -10 21.3g 5.4g 3168 S 231.5 70.4 772:38.37 freeswitch

从top的显示中可以看到fs的内存占用持续升高。

总结

fs启动打开的端口超过一定数目(1000)之后,会有内存占用过大和内存持续升高的问题。

在删除多余的端口资源后,测试恢复正常。

具体原因需要对sofia模块代码走读确定。

空空如常

求真得真