小弟最近用linux做一个网络服务程序.使用每一个请求建一个线程的模式.使用: if(pthread_create(&tid,NULL,ThreadRec,(void *)&argIn2)) printf("create rec thread fail..\n"); 语句创建线程,使用:pthread_exit(NULL);return NULL; 结束线程. 服务运行一切顺利.使用 ps axms命令查看线程数目.随着用户连接与断开增减.一切正常. 问题是:当用户连接与断开过多.也就是曾经创建的线程达到一定数目.pthread_create返回失败.用户线程不能...
我调整完squid时检查配置: squid -X -f /etc/squid/squid.conf.child -k check 报错如下: 2010/01/28 16:39:54| ALERT: setresuid: (11) Resource temporarily unavailable 我的服务器上跑了3个squid进程,有2个squid进程衍生出800多个线程。仔细检查发现,一个进程的800个线程都在运行,而另一个的800个线程中只有200多个在运行。squid进程是以用户squid运行的。 是不是内核对SUID进程的数量有限制啊?我在/proc下找了很久也没...
创建一个新进程, 测试系统上最大线程数限制(结果见 表一 ), 但是有下面几处不明白: 1. 线程栈大小在:[128KB, 16392KB] 区间内时, 该进程内所有线程占用"栈"内存平均在 3G 左右. 而我机器只有1G 物理内存(无交换分区). 2. 线程栈大小在:128KB, 64KB, 32KB之间由大到小变化时, 该进程内所有线程占用"栈"内存也会变化? 按理说 (ThreadStackSize * MaxThreads) 大体应为物理空间的常数倍. 哪位大牛指点指点迷津 ? ...
线程数跟系统资源也有关系,在kernel中有这样的代码: max_threads = mempages / (8 * THREAD_SIZE / PAGE_SIZE); /* * we need to allow at least 20 threads to boot a system */ if(max_threads < 20) max_threads = 20; init_task.signal- >rlim[RLIMIT_NPROC].rlim_cur = max_threads/2; init_task.signal- >rlim[RLIMIT_NPROC].rlim_max = max_threads/2; ...
linux 系统中单个进程的最大线程数有其最大的限制 PTHREAD_THREADS_MAX 这个限制可以在 /usr/include/bits/local_lim.h 中查看 对 linuxthreads 这个值一般是 1024,对于 nptl 则没有硬性的限制,仅仅受限于系统的资源 这个系统的资源主要就是线程的 stack 所占用的内存,用 ulimit -s 可以查看默认的线程栈大小,一般情况下,这个值是 8M 可以写一段简单的代码验证最多可以创建多少个线程 int main() ...
比如: [code] #include "pthread.h" #define T_MAX 1000 void *th(void *); main() { int i=0; pthread_t tid[T_MAX]; while(i<=T_MAX){ if(pthread_create(&tid,NULL,th,NULL)!=0){ i++; //此时如何确定还有多少个仍活着的线程? } } } void *th(void *para) { pthread_detach(pthread_self()); printf("alived!\n"); pthread_exit(0); ...
1.ulimit -u 显示的是系统能创建的最大进程数,包括子进程吗?一个主进程能创建的子进程数有限制吗? 2./proc/sys/kernel/threads-max:是指一个进程能创建的最大线程?还是系统能创建的最大线程数?
1.ulimit -u 显示的是系统能创建的最大进程数,包括子进程吗?一个主进程能创建的子进程数有限制吗? 2./proc/sys/kernel/threads-max:是指一个进程能创建的最大线程?还是系统能创建的最大线程数?