Linux进程数限制分三层:当前会话临时限制、用户级持久限制、系统级全局上限;需分别通过ulimit命令、/etc/security/limits.conf配置及kernel.pid_max参数协同调整才能生效。

Linux最大进程数不是单靠一个命令就能“设完就生效”的,它分三层:当前会话临时限制、用户级持久限制、系统级全局上限。只改其中一层,很可能不起作用。
一、先看当前限制是多少
运行以下命令,重点关注 max user processes (-u) 这一项:
ulimit -a
输出类似:
max user processes (-u) 4096
这个值是当前 shell 会话的软限制,普通用户可自行调低,但不能超过硬限制(硬限制需 root 权限修改)。
二、临时调整(仅本次终端有效)
适合调试或应急场景,关闭终端即失效:
- 设置软限制(用户自己能改):ulimit -u 8192
- 同时设软硬限制(需 root):ulimit -S -u 8192 && ulimit -H -u 8192
注意:ulimit -u 只控制“该用户能启动多少个进程/线程”,不等于系统总进程数,也不影响其他用户。
三、永久生效:用户级配置
编辑 /etc/security/limits.conf 或更推荐的独立配置文件(如 /etc/security/limits.d/20-nproc.conf):
- 对所有用户生效(常用):
* soft nproc 65535
* hard nproc 65535 - 仅对特定用户生效(更安全):
myapp soft nproc 16384
myapp hard nproc 16384
⚠️ 关键点:
• 修改后必须重新登录(不是新开终端),SSH 登出重连或 su - myapp 才加载新限制;
• 确保 /etc/pam.d/common-session 中有 session required pam_limits.so(多数发行版默认已启用)。
四、别漏掉系统级上限:kernel.pid_max
即使用户限制设到 65535,若内核允许的最大 PID 数太小,实际仍无法创建那么多进程:
- 查看当前值:cat /proc/sys/kernel/pid_max
- 临时调高(重启失效):sudo sysctl -w kernel.pid_max=196608
- 永久生效:在 /etc/sysctl.conf 中添加
kernel.pid_max = 196608,再执行 sudo sysctl -p
✅ 建议值:一般设为 131072 或 196608 即可,过高可能增加调度开销。










