如何提高Fresswitch的性能
一. 主要表现
众所周知,Freeswitch(FS)相比Asterisk有着较高的性能优势,最近也在尝试使用FS来测试它的性能优势到底在哪。使用之后,FS的性能并没有达到预期的要求。
1.1 测试环境
FS(版本1.6.20)安装在centos6.5系统上, FS配置了30000用户, 使用Sipp进行测试
1.2 caps不高
缓慢提高Sipp每秒发往FS的包的数量, 当caps提高到30以上时,会出现FS来不及处理Sipp发送的包,导致Sipp收不到响应而重传包。
1.3 原因分析
添加log和代码阅读, 发现FS数据库操作需要20ms时间。 而且一个线程操作数据库时, 会加锁导致后面的线程必须等之前的线程操作完数据库才可以继续运行下去。caps提高后, 后面的线程会被挂起, caps只有保持30以下,才不会出现这种问题。
二. 主要措施
初步原因是因为数据库性能不高导致,所以针对这一问题,进行了数据库的优化。
2.1 更换数据库
FS默认的数据库是sqlite,sqlite并不适合高并发的情况下,所以将FS的数据库替换为Mysql。 替换之后,caps并没有提升。
2.2 数据库放内存
将数据库放到内存里,caps也没有提升
2.3 Mysql连接池
优化了FS连接Mysql方式