开发者

pthread_create ENOMEM around 32000 threads

The process running get stuck around 32 000 (± 5%)

~# cat /proc/sys/kernel/threads-max 127862

~# ulimit -s stack size (kbytes, -s) 2048

free memory available : 3,5 Go

Further more when I try basic command while the process is stuck like "top", I get the bas开发者_如何学JAVAh message : can't fork, not enough memory. Even if there is still 3,5 Go of free memory.

What could be limit the thread creation at 32 000 ?


Threads are identified with Thread IDs (TIDs), which are just PIDs in Linux, and...

~% sysctl kernel.pid_max
kernel.pid_max = 32768

PIDs in Linux are 16-bit, and 32768 is already the maximum value allowed. With that many threads, you have just completely filled the operating system process table. I don't think you will be able to create more threads than that.

Anyways, there is something really wrong with your design if you need that many threads. There is really no justification to have that many.


almost 10 years later: kernel 5.6. There is a limit in kernel/fork.c: see max_threads/2.

But the main culprit are mmaps. See strace output:

mprotect(0x7fbff49ba000, 8388608, PROT_READ|PROT_WRITE) = -1 ENOMEM (Cannot > allocate memory)

Increase /proc/sys/vm/max_map_count for more threads.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜