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.
~~~
';