不能直接用prlimit单独调高软限制,必须先确保硬限足够;可用sudo prlimit --nofile=65535:65535 pid一步设置,或分步执行sudo prlimit --nofile=:65535 pid和sudo prlimit --nofile=65535: pid;调整仅对当前进程有效,长期生效需配置systemd的limitnofile或/etc/security/limits.conf。

不能直接用 prlimit --nofile=新值 单独调高正在运行进程的软限制,因为软限不能超过硬限;必须先确保硬限制足够,再同步或分步设置软硬限。
确认当前限制并检查硬限是否够用
先找到目标进程 PID,例如 Nginx 主进程:
- 用
pgrep -f nginx或ps aux | grep nginx获取 PID(通常取 master 进程) - 执行
prlimit -n PID,查看输出中的 SOFT 和 HARD 值 - 若想把软限设为 65535,但 HARD 显示只有 4096,则必须先提升硬限,否则会报 Operation not permitted
用 root 权限一步到位设置软硬限
推荐使用统一值,避免后续混淆:
- 执行
sudo prlimit --nofile=65535:65535 PID - 注意格式是 soft:hard,中间是英文冒号,不能写成等号或空格
- 该命令需 root 权限,且目标进程须由同一用户启动(或具备
CAP_SYS_RESOURCE)
分两步调整:先提硬限、再设软限
适合需要保留原有软限过渡,或想明确每步效果的场景:
- 只提升硬限制:
sudo prlimit --nofile=:65535 PID(前面空着表示不改软限) - 再单独设置软限制:
sudo prlimit --nofile=65535: PID(后面空着表示不改硬限) - 两次执行后,再用
prlimit -n PID验证 SOFT 和 HARD 是否都已更新
验证生效与长期生效建议
调整后立即可见,但仅对当前进程有效:
- 重启服务后会恢复为启动时的 limits(如 systemd 默认值或启动脚本中 ulimit 设置)
- 若服务由 systemd 管理,应在
[Service]段添加:LimitNOFILE=65535或LimitNOFILE=65535:65535,然后systemctl daemon-reload && systemctl restart 服务名 - 普通用户进程无法自行提硬限,除非系统已配置
/etc/security/limits.conf或 systemd 的DefaultLimitNOFILE











