Linux下一个进程可以创建的最大线程数是多少?
如何(如果可能的话)修改这个值?
Linux下一个进程可以创建的最大线程数是多少?
如何(如果可能的话)修改这个值?
当前回答
要检索它:
cat /proc/sys/kernel/threads-max
设置方法:
echo 123456789 | sudo tee -a /proc/sys/kernel/threads-max
123456789 = #线程
其他回答
@dragosrsupercool
Linux不使用虚拟内存来计算线程的最大值,而是使用安装在系统上的物理ram
max_threads = totalram_pages / (8 * 8192 / 4096);
http://kavassalis.com/2011/03/linux-and-the-maximum-number-of-processes-threads/
内核/ fork.c
/* The default maximum number of threads is set to a safe
* value: the thread structures can take up at most half
* of memory.
*/
max_threads = mempages / (8 * THREAD_SIZE / PAGE_SIZE);
所以thread max在每个系统之间是不同的,因为安装的ram可以来自不同的大小,我知道Linux不需要增加虚拟内存,因为在32位上我们有3 GB的用户空间和1 GB的内核,在64位上我们有128 TB的虚拟内存,这发生在Solaris上,如果你想增加虚拟内存,你需要增加交换空间。
取决于您的系统,只需编写一个示例程序[通过在循环中创建进程],并使用ps axo pid,ppid,rss,vsz,nlwp,cmd检查。当它不能再创建线程时,检查nlwp计数[nlwp是线程数],瞧,你得到了你的傻瓜证明的答案,而不是通过书籍
Yes, to increase the threads number you need to increase the virtual memory or decrease the stack size. In Raspberry Pi I didn’t find a way to increase the virtual memory, if a decrease the stack size from default 8MB to 1MB It is possibly get more than 1000 threads per process but decrease the stack size with the “ulimit -s” command make this for all threads. So, my solution was use “pthread_t” instance “thread class” because the pthread_t let me set the stack size per each thread. Finally, I am available to archive more than 1000 threads per process in Raspberry Pi each one with 1MB of stack.
要永久地固定,
vim /etc/sysctl.conf
并添加
kernel.threads-max = "value"
我们可以看到linux中下面文件中定义的最大线程数
猫/proc/sys/kernel/threads-max
(OR)
Sysctl -a | grep threads-max