运行过程遇到大约32 000(±5%)
〜#cat / proc / sys / kernel / threads-max 127862
〜#ulimit -s 堆栈大小(kbytes,-s)2048
可用内存:3,5转
更进一步当我尝试基本命令而进程被卡在“顶部”时,我得到了bash消息:无法分叉,没有足够的内存。 即使仍有3,5 Go的免费记忆。
什么可能限制线程创建在32 000?
答案 0 :(得分:3)
线程用线程ID(TID)标识,它们只是Linux中的PID,并且......
~% sysctl kernel.pid_max
kernel.pid_max = 32768
Linux中的PID是16位,32768已经是允许的最大值。有了这么多线程,您就完全填满了操作系统进程表。我不认为你能创造更多的线程。
无论如何,如果您需要那么多线程,那么您的设计会出现真的错误。拥有那么多人真的没有理由。
答案 1 :(得分:2)
近10年后:内核5.6。 kernel / fork.c中有一个限制:请参见max_threads / 2。
但是罪魁祸首是地图。参见strace
输出:
mprotect(0x7fbff49ba000,8388608,PROT_READ | PROT_WRITE)= -1 ENOMEM(无法>分配内存)
增加/proc/sys/vm/max_map_count
以获得更多线程。