在 Debian(以及大多数 Linux 发行版)中,线程数限制通常不是由单一参数控制的,而是由多个 ulimit 和资源限制共同决定。下面系统地说明。
ulimit -u
ulimit -a | grep processes
ulimit -n
ulimit -u
cat /proc/sys/kernel/threads-max
cat /proc/sys/kernel/pid_max
ulimit -u 100000
编辑:
/etc/security/limits.conf
示例(允许用户 appuser 创建更多线程):
appuser soft nproc 100000
appuser hard nproc 100000
注意:
nproc控制的是 进程/线程总数- 需要重新登录或重启服务生效
cat /proc/sys/kernel/threads-max
修改(临时):
sysctl -w kernel.threads-max=200000
永久:
/etc/sysctl.conf
kernel.threads-max=200000
cat /proc/sys/kernel/pid_max
sysctl -w kernel.pid_max=400000
如果是 systemd 管理的服务,ulimit 可能不生效。
查看:
systemctl show your-service | grep Tasks
修改服务文件:
[Service]
TasksMax=100000
然后:
systemctl daemon-reload
systemctl restart your-service
fork: resource temporarily unavailablecannot create threadjava.lang.OutOfMemoryError: unable to create new native thread通常原因:
ulimit -u 太小TasksMax 限制threads-max 太小* soft nproc 100000
* hard nproc 100000
kernel.threads-max=300000
kernel.pid_max=400000
服务:
TasksMax=200000
如果你能说明:
我可以给你更精确的配置建议。