当前位置: 技术问答>linux和unix
linux中一个进程的最大线程数量是多少?
来源: 互联网 发布时间:2015-07-20
本文导语: 一个没有调用 fork 的程序应该算作一个进程吧 那么在这个程序中最大的线程数目是多少呢? 我建立了 200 多个线程后就出现错误 Segmentation fault 了 man 3 pthread_create 中提到 RETURN VALUE On success, the i...
一个没有调用 fork 的程序应该算作一个进程吧
那么在这个程序中最大的线程数目是多少呢?
我建立了 200 多个线程后就出现错误 Segmentation fault 了
man 3 pthread_create 中提到
RETURN VALUE
On success, the identifier of the newly created thread is stored in the
location pointed by the thread argument, and a 0 is returned. On error,
a non-zero error code is returned.
ERRORS
EAGAIN not enough system resources to create a process for the new thread.
EAGAIN more than PTHREAD_THREADS_MAX threads are already active.
PTHREAD_THREADS_MAX 在我的系统中的数值是 16384
系统资源怎么计算呢???
找了好久也没有找到答案,请各位大虾指点迷津
那么在这个程序中最大的线程数目是多少呢?
我建立了 200 多个线程后就出现错误 Segmentation fault 了
man 3 pthread_create 中提到
RETURN VALUE
On success, the identifier of the newly created thread is stored in the
location pointed by the thread argument, and a 0 is returned. On error,
a non-zero error code is returned.
ERRORS
EAGAIN not enough system resources to create a process for the new thread.
EAGAIN more than PTHREAD_THREADS_MAX threads are already active.
PTHREAD_THREADS_MAX 在我的系统中的数值是 16384
系统资源怎么计算呢???
找了好久也没有找到答案,请各位大虾指点迷津
|
看到ulimit -a的结果了吗?
stack size (kbytes, -s) 8192
每个线程的栈要占8M,你是开到差不多256个线程的时候没内存的,算算,8M*256=2G,所以没空间了啊。
你可以用ulimit -s 256 然后再运行看看。
stack size (kbytes, -s) 8192
每个线程的栈要占8M,你是开到差不多256个线程的时候没内存的,算算,8M*256=2G,所以没空间了啊。
你可以用ulimit -s 256 然后再运行看看。
|
在slackware下执行成功,PTHREAD_THREADS_MAX=1024,在1021时返回EAGAIN,ret=11
你的程序在创建到第254号时,返回ret=12,查一查errno.h,你就会发现是:
#define EAGAIN 11 /* Try again */
#define ENOMEM 12 /* Out of memory */
说明在达到线程数量限制前,就已经没可用内存了。。。
然后,只创建了到253号,也就是t[i]中只有0-253有效,当然pthread_cancel第254号当然会出错啊。
你的程序在创建到第254号时,返回ret=12,查一查errno.h,你就会发现是:
#define EAGAIN 11 /* Try again */
#define ENOMEM 12 /* Out of memory */
说明在达到线程数量限制前,就已经没可用内存了。。。
然后,只创建了到253号,也就是t[i]中只有0-253有效,当然pthread_cancel第254号当然会出错啊。
|
这个是由你操作系统的设置决定的。
|
如果线程超过最大限制,函数会返回EAGAIN,Segmentation fault 应该是其他原因造成得,系统得最大线程数取决于操作系统得设定,每个线程当然会消耗一定得资源,如果设得太大了,也会由于资源耗尽而无法达到最大线程数得。
|
redhat 9.0 默认为253个线程+主线程+守护管理线程=255
但你可以通过系统参数进行调整,同时也要修改相关头文件
#define PTHREAD_THREADS_MAX 1024
在你的头文件中定义:
#ifdef PTHREAD_THREADS_MAX
#undefine PTHREAD_THREADS_MAX
#define PTHREAD_THREADS_MAX 1024
#endif
但你可以通过系统参数进行调整,同时也要修改相关头文件
#define PTHREAD_THREADS_MAX 1024
在你的头文件中定义:
#ifdef PTHREAD_THREADS_MAX
#undefine PTHREAD_THREADS_MAX
#define PTHREAD_THREADS_MAX 1024
#endif
|
不同系统,不同版本都不一样的
可以用ulimit -a看/修改.
可以用ulimit -a看/修改.
|
我这也出现和楼主一样的问题