首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pthread_create ENOMEM大约32000个线程

pthread_create ENOMEM大约32000个线程
EN

Stack Overflow用户
提问于 2010-08-06 05:24:54
回答 2查看 1K关注 0票数 1

运行的进程停滞在32 000左右(±5%)

~# cat /proc/sys/内核/线程-最大127862

~# ulimit -s堆栈大小(-s,-s) 2048

可用内存: 3,5 Go

此外,当我尝试基本命令,而进程停留在"top“时,我得到bash消息:无法派生,没有足够的内存。即使还有3.5 Go的空闲内存。

是什么将线程创建限制在32,000?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-06 05:32:57

线程是用线程ID(TID)来标识的,在Linux中就是PID,而且...

代码语言:javascript
复制
~% sysctl kernel.pid_max
kernel.pid_max = 32768

Linux中的PID是16位的,32768已经是允许的最大值。有了这么多线程,您已经完全填满了操作系统进程表。我不认为你能创建比这更多的线程。

不管怎么说,如果你需要这么多线程,你的设计肯定有点错误。真的没有理由有这么多。

票数 5
EN

Stack Overflow用户

发布于 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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3419283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档