Nginx是大型架构核心,下面详解Nginx并发性能@mikechen
1. worker_processes(工作进程数)
这是最重要的一点,直接决定能利用多少CPU核心。

# 推荐设置:等于CPU核心数,或 auto(Nginx 1.11+ 支持)
worker_processes auto;
# 或者手动指定(推荐生产环境明确写死)
worker_processes 8; # 根据你的CPU核心数调整,一般是物理核数或核数×线程数(如超线程)
查看核心数命令:
cat /proc/cpuinfo | grep "cpu cores" | uniq
lscpu | grep "CPU(s):"
# 或者使用自动检测(推荐)
worker_processes auto;
最佳实践:worker_processes = CPU物理核心数 × (1~2),有超线程建议乘2。
2. worker_connections(单个进程最大连接数)
每个worker进程能接受的最大并发连接数。

events {
# 默认是1024,太低了!高并发必改
worker_connections 10240; # 常见值:10240 ~ 65535
# 或者更高(需要配合系统限制)
worker_connections 32768;
}
理论最大并发 = worker_processes × worker_connections
例如:8个进程 × 10240 = 81,920 并发(理论值)
3. 系统级连接数限制(ulimit 和 sysctl)
Nginx再牛,也受限于操作系统文件句柄和连接数限制。

修改用户级限制(ulimit):
# 永久修改 /etc/security/limits.conf
* soft nofile 1048576
* hard nofile 1048576
root soft nofile 1048576
root hard nofile 1048576
修改系统级限制:
# /etc/sysctl.conf 加入以下参数
fs.file-max = 1048576
net.core.somaxconn = 32768
net.ipv4.tcp_max_syn_backlog = 16384
net.core.netdev_max_backlog = 16384
# TCP连接复用优化(强烈推荐)
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0 # 已经被废弃,建议不要开
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_keepalive_time = 300
# 应用配置
sysctl -p
4. multi_accept(一次接受多个连接)
让每个worker进程一次性接受尽可能多的新连接,而不是一个一个来。

events {
use epoll; # Linux推荐使用epoll
worker_connections 10240;
multi_accept on; # 默认是off,一定要打开!
}
最终推荐高并发配置示例(10万+并发常见配置):
worker_processes auto; # 或写死为CPU核心数×2
worker_rlimit_nofile 1048576; # 覆盖ulimit限制(非常重要!)
events {
use epoll;
worker_connections 32768;
multi_accept on;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
keepalive_requests 100000;
# 连接频率限制(防CC攻击)
limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_conn addr 50;
# 其他优化...
}
验证当前能支持多少并发
# 查看Nginx最大文件句柄
cat /proc/$(cat /run/nginx.pid)/limits | grep "Max open files"
# 查看系统当前连接数
ss -s
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
作者简介
陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注作者「mikechen」公众号,获取更多技术干货!
后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》,后台回复【面试】即可获取《史上最全阿里Java面试题总结》