Nginx高并发稳定运行需系统限制、Nginx配置、运行时生效三者对齐:修改/etc/security/limits.conf设用户级句柄上限,nginx.conf中配置worker_rlimit_nofile和worker_connections,并通过/proc/PID/limits验证生效。

要让 Nginx 在高并发下稳定运行,子进程能打开的文件句柄数必须配得够用。核心原则是:**系统限制、Nginx 配置、运行时生效三者对齐**,缺一不可。单独改某一项,往往不起作用。
查清当前限制值
先确认瓶颈在哪,避免盲目修改:
- 运行中查看 master 进程限制:
cat /proc/$(cat /var/run/nginx.pid)/limits | grep "Max open files" - 查看所有 worker 进程限制(逐个检查):
ps --ppid $(cat /var/run/nginx.pid) -o %p | sed '1d' | xargs -I{} cat /proc/{}/limits | grep "Max open files" - 检查当前 shell 的 ulimit 值:
ulimit -n(这个值直接影响 Nginx 启动时继承的上限) - 查看系统级最大文件句柄总数:
sysctl -n fs.file-max
同步调整系统级限制
只改 Nginx 配置没用,底层系统不放行,worker 进程根本拿不到更多句柄。
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
- 永久设置用户级限制:编辑
/etc/security/limits.conf,添加以下四行(推荐统一设为 65535 或更高):* soft nofile 65535* hard nofile 65535nginx soft nofile 65535nginx hard nofile 65535 - 若 Nginx 以 root 启动,也需明确配置 root 用户:
root soft nofile 65535root hard nofile 65535 - 重启终端或重新登录,再执行
ulimit -n确认已生效
配置 Nginx 自身参数
在 nginx.conf 的主配置块(不在 http 或 events 内)中添加:
-
worker_rlimit_nofile 65535;—— 这是关键,它告诉每个 worker 子进程最多可打开多少文件句柄 - 确保
events块中worker_connections不超过worker_rlimit_nofile值(建议设为相同或略小,如 65535 或 60000) - 示例片段:
worker_rlimit_nofile 65535;<br> events {<br> use epoll;<br> worker_connections 60000;<br> multi_accept on;<br> }
验证是否真正生效
改完配置后,重载 Nginx(nginx -s reload),再检查:
- 确认 worker 进程 PID:
ps aux | grep nginx | grep -v grep | grep -v master - 挑一个 worker PID(比如 12345),执行:
cat /proc/12345/limits | grep "Max open files" - 输出应类似:
Max open files 65535 65535 files—— 软硬限制一致且达到预期值才算成功
不复杂但容易忽略:ulimit 和 worker_rlimit_nofile 必须匹配,且 limits.conf 修改后需新会话或重启服务才加载。线上环境建议设为 65535 起步,压测后再微调。

















