linux中修改最大进程数需同步调整pid_max、threads-max和ulimit -u三层限制,任一未调大均会导致fork失败或java报unable to create new native thread;三者取最小值即实际瓶颈,须分别配置系统级参数、用户级limits及systemd服务limitnproc。

Linux 中修改系统最大进程数不是改一个参数就能生效的事,它被三层限制共同约束:内核级 PID 总池大小(pid_max)、内核总线程上限(threads-max)、用户级进程+线程总数(ulimit -u)。三者取最小值,才是你实际能用的上限。漏掉任何一层,Java 应用照样报 unable to create new native thread,Nginx 也照样 fork 失败。
查清当前卡在哪一层
别猜,直接查三处:
-
cat /proc/sys/kernel/pid_max—— 看全局 PID 池上限(x86_64 最高 4194304) -
ulimit -u—— 看当前用户能占多少个 PID(含进程和线程) -
cat /proc/sys/kernel/threads-max—— 看内核允许的总线程数,它 ≈ 可用内存页数 / 8,且不能超过pid_max
哪个值最小,哪个就是真瓶颈。比如 pid_max=4194304、threads-max=139264,但 ulimit -u=4096,那第 4097 个线程就挂——再大的 pid_max 也没用。
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
临时调大 pid_max 和 threads-max
适合验证或应急,重启即失效:
- 运行
sudo sysctl -w kernel.pid_max=196608(别写进/proc/sys/目录,会 Permission denied) - 同理设线程上限:
sudo sysctl -w kernel.threads-max=2097152 - 注意:x86_64 上设超 4194304 会被静默截断;
threads-max不应显著高于pid_max
永久生效要绕过配置陷阱
只往 /etc/sysctl.conf 里加一行容易失效,推荐做法:
- 新建
/etc/sysctl.d/99-pidmax.conf,写入两行:kernel.pid_max = 4194304kernel.threads-max = 2097152 - 执行
sudo sysctl --system(不是sysctl -p),否则.d/下文件不加载 - RHEL/CentOS 7+ 还需
sudo systemctl restart systemd-sysctl - 改完立刻验证:
cat /proc/sys/kernel/pid_max必须显示你写的值,否则配置失败(空格、不可见字符都会导致静默失败)
用户级和 systemd 服务必须单独配
/etc/security/limits.conf 对普通登录用户有效,但对 systemd 启动的服务完全无效:
- 编辑
/etc/security/limits.d/20-nproc.conf,添加:* soft nproc 65535* hard nproc 65535root soft nproc 65535root hard nproc 65535 - 确认
/etc/pam.d/common-session有session required pam_limits.so - systemd 服务必须在
.service文件的[Service]段加:LimitNPROC=65535
或全局设DefaultLimitNPROC=65535在/etc/systemd/system.conf中 - 改完运行:
sudo systemctl daemon-reload && sudo systemctl restart your-service










