FreeSWITCH性能优化备忘录

这段时间在做 FreeSWITCH 的性能优化,把这个过程记录下来,持续更新。。


FreeSWITCH 原生是使用 sqlite ,在大并发的时候 IO 性能很捉急。网上有解决方案,将 db 文件放在内存里提高读写性能,但是 sqlite 有死锁的问题。这不是一个比较好的解决方案。

使用 MySQL 替换 sqlite。配置简单,但是不能直接使用程序默认的建表,需要进一步优化才能提高并发。

关于 FreeSWITCH 使用 MySQL 可以见旧文: FreeSWITCH使用MySQL配置

在提高注册性能的时候,发现 MySQL 的读写也会成为性能瓶颈。解决方案是引擎 使用内存表 MEMORY 替代原本的 InnoDB。如果直接用程序内置的建表会爆各种长度错误,需要适当调整 varchar 的长度。

修改了内存表之后,启动可能会报错。那是因为 MySQL 默认的内存表大小只有 16M。我们可以稍微的提高他的大小。修改数据库配置文件 my.cnf[mysqld] 选项下的 tmp_table_sizemax_heap_table_size 大小,然后重启数据库。

在提高呼叫性能的时候,发现只是用内存表还是不行。呼叫即使结束了,channels 表还是进行 update ,而且速度特别慢,呼叫结束 delete 每秒处理还不到 10 条。最后是 添加索引解决create index uuid1 on channels(uuid);


简单总结一下:

  1. 使用 MySQL 替代 sqlite
  2. MySQL 使用内存表(MEMORY)
  3. MySQL 需要修改内存大小以供高并发
  4. 部分表需要添加索引提升查找速度

参考旧文:
FreeSWITCH使用MySQL配置
FreeSWITCH使用数据库存储用户


版权声明:本文为TangVim原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。