Linux下一个进程可以创建的最大线程数是多少?

如何(如果可能的话)修改这个值?


当前回答

我们可以看到linux中下面文件中定义的最大线程数

猫/proc/sys/kernel/threads-max

(OR)

Sysctl -a | grep threads-max

其他回答

要永久地固定,

vim /etc/sysctl.conf

并添加

kernel.threads-max = "value"

@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是线程数],瞧,你得到了你的傻瓜证明的答案,而不是通过书籍

我们可以看到linux中下面文件中定义的最大线程数

猫/proc/sys/kernel/threads-max

(OR)

Sysctl -a | grep threads-max

说LINUX没有每个进程单独的线程限制是错误的。

Linux间接实现了每个进程最大线程数!!

number of threads = total virtual memory / (stack size*1024*1024)

因此,可以通过增加总虚拟内存或减小堆栈大小来增加每个进程的线程数。但是,当最大虚拟内存等于交换内存时,过多地减小堆栈大小会导致代码失败,因为堆栈溢出。

检查你的机器:

总虚拟内存:ulimit -v(默认值是无限的,因此您需要增加交换内存来增加它)

总堆栈大小:ulimit -s(默认为8Mb)

命令来增加这些值。

ulimit -s newvalue

ulimit -v newvalue

*将新值替换为您想要放置的限制值。

引用:

http://dustycodes.wordpress.com/2012/02/09/increasing-number-of-threads-per-process/