freeswitch的一个性能问题

发布时间 2023-11-17 17:39:12作者: 求真得真

 

 

 

 

概述

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模块代码走读确定。

 

空空如常

求真得真