这段时间在做 FreeSWITCH 的性能优化,把这个过程记录下来,持续更新。。
FreeSWITCH 原生是使用 sqlite ,在大并发的时候 IO 性能很捉急。网上有解决方案,将 db 文件放在内存里提高读写性能,但是 sqlite 有死锁的问题。这不是一个比较好的解决方案。
使用 MySQL 替换 sqlite。配置简单,但是不能直接使用程序默认的建表,需要进一步优化才能提高并发。
关于 FreeSWITCH 使用 MySQL 可以见旧文: FreeSWITCH使用MySQL配置 。
在提高注册性能的时候,发现 MySQL 的读写也会成为性能瓶颈。解决方案是引擎 使用内存表 MEMORY 替代原本的 InnoDB。如果直接用程序内置的建表会爆各种长度错误,需要适当调整 varchar 的长度。
修改了内存表之后,启动可能会报错。那是因为 MySQL 默认的内存表大小只有 16M。我们可以稍微的提高他的大小。修改数据库配置文件 my.cnf 的 [mysqld] 选项下的 tmp_table_size 和 max_heap_table_size 大小,然后重启数据库。
在提高呼叫性能的时候,发现只是用内存表还是不行。呼叫即使结束了,channels 表还是进行 update ,而且速度特别慢,呼叫结束 delete 每秒处理还不到 10 条。最后是 添加索引解决:create index uuid1 on channels(uuid);
简单总结一下:
- 使用
MySQL替代sqlite MySQL使用内存表(MEMORY)MySQL需要修改内存大小以供高并发- 部分表需要添加索引提升查找速度
版权声明:本文为TangVim原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。