问题描述

在FreeSWITCH的switch.conf.xml里面有max-sessions的配置,

  1. <param name="max-sessions" value="100000"/>


在fs启动后,通过status命令查看,也是100000的最大并发。
在系统运行一段时间后,通过status再次查看,已经变成168。

问题定位

问题原因
Anthony Minessale做出的解答如下:

you are running out of threads and it’s fixing itself. one of many reasons you should upgrade to 64 bit OS \ execute this in your shell before you start FS \ ulimit -c unlimited ulimit -d unlimited ulimit -f unlimited ulimit -i unlimited ulimit -n 999999 ulimit -q unlimited ulimit -u unlimited ulimit -v unlimited ulimit -x unlimited ulimit -s 244 ulimit -l unlimited

也就是说,FreeSWITCH在发现系统线程数不够的时候,会自我调整,将最大会话数降到目前系统能支撑的数量。

解决方案

1、计算目前系统可以使用的线程数
总内存/栈大小
如64G内存,8M栈大小的话,支持的线程数为:
64000/8 = 8000
2、使用命令查看目前使用的线程数
ps -eLf|wc -l
找到线程数占用最大的程序,并移除掉
3、减少线程栈大小,增大线程数
ulimit -s 2014