连接数限制因素拆解
| 限制类型 |
具体影响项 |
| 操作系统限制 |
1. 单个进程文件描述符限制(默认通常较低,如1024); |
- 可用端口范围(默认1024-65535);
- 最大待处理连接队列(net.core.somaxconn) |
| Nginx配置限制 | 1. 工作进程数(worker_processes);
- 单个工作进程最大连接数(worker_connections) |
| 硬件资源限制 | 1. 内存(每个连接约占用几KB内存);
- CPU处理能力(高并发下CPU负载阈值) |
核心参数详解(含查看/修改命令)
1. 操作系统层面参数
| 参数名称 |
作用 |
查看命令 |
临时修改命令 |
永久修改方式 |
| 文件描述符限制 |
单个进程可打开的最大文件/连接数 |
ulimit -n |
ulimit -n 65535 |
编辑/etc/security/limits.conf,添加 |
| `* soft nofile 65535 |
|
|
|
|
- hard nofile 65535
| | 最大待处理连接队列 | 系统接收新连接的队列上限 |sysctl net.core.somaxconn|sysctl -w net.core.somaxconn=32768 | 编辑/etc/sysctl.conf,添加:net.core.somaxconn = 32768| | 可用端口范围 | 出站连接可用端口区间 |sysctl net.ipv4.ip_local_port_range|sysctl -w net.ipv4.ip_local_port_range="1024 65000" | 编辑/etc/sysctl.conf,添加:net.ipv4.ip_local_port_range = 1024 65000` |
注:永久修改后需执行 sysctl -p 使sysctl配置生效,文件描述符限制需重新登录终端生效。
2. Nginx配置层面参数
| 参数名称 |
作用 |
推荐配置 |
说明 |
| worker_processes |
Nginx工作进程数 |
worker_processes auto; |
自动适配CPU核心数(也可手动指定核心数) |
| worker_connections |
单个工作进程最大连接数 |
worker_connections 10240; |
不可超过系统文件描述符限制 |
| multi_accept |
是否一次性接受所有新连接 |
multi_accept on; |
开启后提升高并发场景下的连接接收效率 |
| keepalive_timeout |
长连接超时时间 |
keepalive_timeout 65; |
控制长连接空闲超时,避免端口占用 |
| keepalive_requests |
单个长连接可处理的请求数 |
keepalive_requests 100; |
提升连接复用率,减少连接建立开销 |
经典Nginx配置示例
worker_processes auto; # 适配CPU核心数
worker_rlimit_nofile 65535; # 突破Nginx进程文件描述符限制
events {
worker_connections 10240; # 单进程最大连接数
multi_accept on; # 一次性接收所有新连接
use epoll; # 启用高效事件驱动模型(Linux推荐)
}
http {
keepalive_timeout 65; # 长连接超时时间
keepalive_requests 100; # 单个长连接最大请求数
}
最大连接数计算与调整步骤
1. 理论最大连接数公式
最大连接数 = worker_processes(工作进程数) × worker_connections(单进程连接数)
- 4核CPU(worker_processes=4)
- worker_connections=10240
- 理论最大连接数 = 4 × 10240 = 40960
2. 完整调整步骤
- 检查当前限制
- 查看系统文件描述符限制:
ulimit -n
- 查看Nginx进程文件描述符使用:
cat /proc/<nginx-pid>/limits(替换<nginx-pid>为实际PID)
- 查看Nginx配置:
nginx -T(打印完整配置)
- 调整系统限制
- 按「操作系统层面参数」表格配置文件描述符、连接队列、端口范围