linux无法永久解除进程数限制,需同时配置limits.conf的soft/hard nproc、启用pam_limits.so、systemd服务的limitnproc及内核pid_max参数。

直接改 /etc/security/limits.conf 不能“永久解除”限制,只能设为足够高的值——Linux 本身不支持无限进程数,必须结合内核参数与 systemd 配置才真正生效。
明确软硬限制与适用范围
limits.conf 中的 nproc 控制单个用户能创建的进程/线程总数(含子进程),不是系统全局上限。需分清:
- soft nproc:实际生效值,进程默认按此限制启动
- hard nproc:soft 的上限,普通用户无法自行突破
-
*通配符对 root 或部分系统服务可能无效,建议指定用户名或组名(如@docker、www-data)
正确配置 limits.conf 并确保被加载
编辑 /etc/security/limits.conf,追加两行(注意格式:无空格、无等号、每项单独一行):
www-data soft nproc 65535www-data hard nproc 65535
然后确认 PAM 模块启用:
- Debian/Ubuntu 系统检查
/etc/pam.d/common-session是否含session required pam_limits.so - RHEL/CentOS 检查
/etc/pam.d/system-auth同样位置 - 若缺失,手动添加该行并保存
systemd 服务必须单独设置 LimitNPROC
即使 limits.conf 配置正确,systemd 托管的服务(如 nginx、redis、Java 应用)默认不读取它。必须在 service 文件中显式声明:
- 运行
sudo systemctl edit your-app.service - 填入:
[Service]
LimitNPROC=65535 - 保存后执行
sudo systemctl daemon-reload && sudo systemctl restart your-app
验证方式:systemctl show your-app --property LimitNPROC,输出应为 LimitNPROC=65535。
别漏掉内核级上限 pid_max
/proc/sys/kernel/pid_max 是整个系统可分配 PID 的最大值,也等于理论最大进程总数。默认通常为 32768 或 65536,高并发下容易成为瓶颈:
- 临时调大:
sudo sysctl -w kernel.pid_max=131072 - 永久生效:在
/etc/sysctl.conf中追加kernel.pid_max = 131072,再运行sudo sysctl -p - 注意:该值需是 2 的幂次方(如 65536、131072),某些内核版本有硬性要求
改完后,务必重新登录目标用户或重启对应服务,否则新限制不会进入进程上下文。











