在 Ubuntu(以及大多数 Linux 发行版)中,线程数限制通常受 ulimit 和 系统级限制 共同影响。下面按常见场景说明如何设置。
主要有三层:
用户级限制(ulimit -u)
每个用户最多能创建的进程/线程数(Linux 中线程≈轻量进程)
系统级限制
/proc/sys/kernel/threads-max/proc/sys/kernel/pid_maxsystemd 服务限制(如果是服务进程)
systemctl 启动的程序,受 TasksMax 限制ulimit -u
cat /proc/<pid>/status | grep Threads
cat /proc/sys/kernel/threads-max
ulimit -u 65535
只对当前终端和子进程有效
编辑:
sudo vim /etc/security/limits.conf
添加(示例):
* soft nproc 65535
* hard nproc 65535
或指定用户:
username soft nproc 65535
username hard nproc 65535
nproc就是线程/进程数限制
重新登录后生效。
如果你是 Java / Nginx / 自定义服务,且用 systemctl 启动:
systemctl show <service> | grep TasksMax
编辑 service 文件:
sudo systemctl edit <service>
添加:
[Service]
TasksMax=infinity
或指定数量:
TasksMax=65535
重载并重启:
sudo systemctl daemon-reload
sudo systemctl restart <service>
sudo sysctl -w kernel.threads-max=100000
永久:
echo "kernel.threads-max=100000" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
Resource temporarily unavailable通常是:
ulimit -u 太小TasksMax 限制检查:
TasksMaxulimit -u如果是普通用户程序:
ulimit -u 65535
如果是服务程序:
[Service]
TasksMax=infinity
如果你能告诉我:
我可以给你更精确的配置方案。