运行的进程停滞在32 000左右(±5%)
~# cat /proc/sys/内核/线程-最大127862
~# ulimit -s堆栈大小(-s,-s) 2048
可用内存: 3,5 Go
此外,当我尝试基本命令,而进程停留在"top“时,我得到bash消息:无法派生,没有足够的内存。即使还有3.5 Go的空闲内存。
是什么将线程创建限制在32,000?
发布于 2010-08-06 05:32:57
线程是用线程ID(TID)来标识的,在Linux中就是PID,而且...
~% sysctl kernel.pid_max
kernel.pid_max = 32768Linux中的PID是16位的,32768已经是允许的最大值。有了这么多线程,您已经完全填满了操作系统进程表。我不认为你能创建比这更多的线程。
不管怎么说,如果你需要这么多线程,你的设计肯定有点错误。真的没有理由有这么多。
发布于 2020-06-24 01:09:51
近10年后:内核5.6。kernel/fork.c中有一个限制:参见max_threads/2。
但主要的罪魁祸首是mmap。请参阅strace输出:
多保护(0x7fbff49ba000,8388608,PROT_READ|PROT_WRITE) = -1内存(无法>分配内存)
增加更多线程的/proc/sys/vm/max_map_count。
https://stackoverflow.com/questions/3419283
复制相似问题