max_conn (max_connection)

最后更新于:2022-04-02 06:21:37

# max\_conn (max\_connection) [TOC] 服务器程序,最大允许的连接数,如`max_connection => 10000`, 此参数用来设置`Server`最大允许维持多少个`TCP`连接。超过此数量后,新进入的连接将被拒绝。 * `max_connection`最大不得超过操作系统`ulimit -n`的值,否则会报一条警告信息,并重置为`ulimit -n`的值 ~~~ WARN swServer_start_check: serv->max_conn is exceed the maximum value[100000]. ~~~ ## 默认设置 * 应用层未设置`max_connection`,底层将使用`ulimit -n`的值作为缺省设置 * 在`4.2.9`或更高版本,当底层检测到`ulimit -n`超过`10000`时将默认设置为`10000`,原因是某些系统设置了`ulimit -n`为`100万`,需要分配大量内存,导致启动失败 ## 最大上限 底层使用了`SESSION_LIST`来实现`session_id`(虚拟`fd`)与真实`fd`的对应,因此除了`max_sockets`限制之外,`max_connection`还受限于`SW_SESSION_LIST_SIZE`宏的设置。 目前`SW_SESSION_LIST_SIZE`底层的值为`1M`,请勿设置`max_connection`超过`1M` ## 内存占用 `max_connection`参数不要调整的过大,根据机器内存的实际情况来设置。Swoole会根据此数值一次性分配一块大内存来保存`Connection`信息,可使用`gdb`跟踪运行中的进程,打印`p sizeof(swConnection)`得到准确的数值。在`1.9.16`版本中一个TCP连接的`Connection`信息,需要占用`224`字节。 ## 最小设置 此选项设置过小底层会抛出错误,并设置为`ulimit -n`的值。 > 最小值为`(serv->worker_num + SwooleG.task_worker_num) * 2 + 32` ~~~ serv->max_connection is too small. ~~~
';