FreeSWITCH与华为SoftX3000对接及压力测试
首先声明:FreeSWITCH 官方从来不对性能做任何承诺,也不进行压力测试。因为大多数的压力测试不能准确的模拟实际的应用场景,而且网上抄来的测试脚本有的都是错误的。
然而,还是有好多人热衷于压力测试。正好我前几天去华为研发中心测过一次,把过程简单记录一下,供大家参考。
再次声明,本文不是鼓吹压力测试的,只是将经过记录一下,给有好奇心的同学散散心。为了要达到好的效果,需要调整很多参数。所以本人不会回答任何相关的问题,高并发的应用请联系相关的商业咨询机构。
本次测试对接设备为华为 SoftX3000,应用为模拟彩铃应用。SoftX3000发 INVITE, FS 收到后使用 Event Socket连接 Erlang 中间件,中间件通过 HTTP 请求连接后端的WEB服务器,WEB服务器通过查询数据库,通过Erlang中间件指示 FS 向主叫送 Early Media(.wav文件),同时呼叫被叫号码(也在 SoftX3000上)。
其中 FS 及 Erlang 中间件在同一台机器上,配置为 4CPU+8G内存,WEB服务器和数据库在另外一台机器上。
华为发 n(n=1, 8, 10, 15, 20, 25) cps, 我方实际处理为 2n。
其中n=1 连续测试 12 小时,未出现呼损及内存泄露。
n=8 测试10分钟无呼损。
n=10 观察到 20% 呼损,原因是被叫侧回503。华为修复后测试未出现呼损。
n=15 10分钟无呼损。
n=20 30分钟,0.05% 呼损。观察到20个失败呼叫全部在被叫侧,怀疑仍是被叫侧问题。
n=25 开始出现呼损(原因是中间使用单进程处理Socket出现瓶颈,需要进一步优化,呵呵)
n cps sessions cpu% mem (FS + Erlang)
8 16 1100+ 60 ~ 70%
10 20 1400+ 60 ~ 70% 1.2G + 91M
15 30 2200+ 70 ~ 80% 1.3G + 136M
20 40 2800+ 80 ~ 90% 2.7G + 227M
25 50 2990+ 90 ~ 99% 开始出现呼损
其中,n由15改为20时,把 FreeSWITCH LOG级别由 debug 改为 warning 后 cpu 使用率下降了 3~4%。
周 5 晚上开启压力测试(n=20),到周一早上结束,在 64 个小时内(其中可能有数小时未处于压力测试状态) FS 共处理 9482177 次呼叫,华为压力测试软件检测出0.05%的呼损,从FS的统计数据来看均为外呼时 SoftX3000 未正确回复 200 所致,由于缺少证据未得到华为的证实。
由于华为对携带文件出门比较严格,而且周一测试结束时我不在现场,因次没有掌握第一手的数据,以上数据均为凭记忆写下或由现场人员转述的,与实际数据可能有出入。
小结:最后我们得出的结果是,FS在40cps的压力下,稳定在 2800 多个 channel,运行了将近 64 个小时。对这个结果我们还是非常满意的。