在 Debian(以及其它 Linux 发行版)中,ulimit 是会影响线程数的,但要看你设置的是哪一个资源限制。
ulimit 中与线程相关的限制ulimit -uulimit -u
含义:用户可创建的最大进程数(processes)
在 Linux 中:
所以:
ulimit -u实际上限制了“进程 + 线程”的总数
例如:
ulimit -u = 1024
那么:
超过限制时,通常会看到:
fork: Resource temporarily unavailable
cannot create thread: Resource temporarily unavailable
ulimit 项对线程的间接影响线程是需要栈内存的:
相关限制:
ulimit -v # 虚拟内存
ulimit -m # 常驻内存(很多系统不生效)
即使 ulimit -u 很大,内存不够也会导致:
pthread_create failed (11: Resource temporarily unavailable)
ulimit -n)虽然不是直接限制线程数,但:
ulimit)即使 ulimit 很大,还可能受:
/proc/sys/kernel/threads-max系统级最大线程数
/proc/sys/kernel/pid_maxPID 上限,也限制总 LWP 数
TasksMax=这些是比 ulimit 更硬的限制
# 当前用户限制
ulimit -a
# 当前线程数
ps -eLf | wc -l
# 某进程线程数
cat /proc/<pid>/status | grep Threads
# 系统上限
cat /proc/sys/kernel/threads-max
会,
ulimit -u(max user processes)直接限制线程数;同时内存和 systemd/cgroup 限制也可能间接限制线程创建。
如果你是遇到:
可以告诉我具体场景,我可以直接帮你定位配置。