温馨提示×

ubuntu ulimit线程数如何设

小樊
46
2026-10-26 04:10:52
栏目: 智能运维

在 Ubuntu(以及大多数 Linux 发行版)中,线程数限制通常受 ulimit 和 系统级限制 共同影响。下面按常见场景说明如何设置。


一、先理解:线程数受什么限制?

主要有三层:

  1. 用户级限制(ulimit -u)
    每个用户最多能创建的进程/线程数(Linux 中线程≈轻量进程)

  2. 系统级限制

    • /proc/sys/kernel/threads-max
    • /proc/sys/kernel/pid_max
  3. systemd 服务限制(如果是服务进程)

    • 通过 systemctl 启动的程序,受 TasksMax 限制

二、查看当前线程数限制

1. 查看当前用户的线程/进程数限制

ulimit -u

2. 查看某进程当前线程数

cat /proc/<pid>/status | grep Threads

3. 查看系统最大线程数

cat /proc/sys/kernel/threads-max

三、修改 ulimit 线程数(用户级)

方法 1:临时生效(当前 shell)

ulimit -u 65535

只对当前终端和子进程有效


方法 2:永久生效(推荐)

编辑:

sudo vim /etc/security/limits.conf

添加(示例):

* soft nproc 65535
* hard nproc 65535

或指定用户:

username soft nproc 65535
username hard nproc 65535

nproc 就是线程/进程数限制

重新登录后生效。


四、systemd 服务的线程数限制(非常重要)

如果你是 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

六、常见问题排查

1. Resource temporarily unavailable

通常是:

  • ulimit -u 太小
  • TasksMax 限制
  • 内存不足(线程也需要栈内存)

2. Java 程序线程数上不去

检查:

  • JVM 参数
  • systemd TasksMax
  • ulimit -u

七、总结(最简方案)

如果是普通用户程序:

ulimit -u 65535

如果是服务程序:

[Service]
TasksMax=infinity

如果你能告诉我:

  • Ubuntu 版本
  • 是 普通程序 / Java / Docker / systemd 服务
  • 报错信息

我可以给你更精确的配置方案。

0 踩