这段时间在做 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 ,而且速度特别慢,呼叫结束

本文记录了FreeSWITCH性能优化的过程,包括使用SQLite替代原生解决方案以改善IO性能,解决SQLite的死锁问题,利用MySQL提高注册和呼叫性能,通过调整内存表大小和添加索引来应对高并发挑战。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



