這個問題,整理了一下網上的資料,結果如下:
一、ulimit -n可以查看一個進程最多可以打開多少文件描述符數;
二、一個進程最多可以產生多少線程,可用如下的方法:
32位linux系統最大內存地址4G,0-3GB的給用戶進程(User Space)使用,3-4GB給內核使用
stack size (kbytes,-s)10240表示線程堆棧大小,3G/10M=最大線程數,
但實際會比這個數小一點,因為程序本身占內存,還有些管理線程,
可以使用ulimit -s來設置stack size,設置的小一點開辟的線程就多。
同時,
/usr/include/bits/local_lim.h中的PTHREAD_THREADS_MAX限制了進程的最大線程數
/proc/sys/kernel/threads-max中限制了系統的最大線程數
查看公司的服務器:
限制數為: 2^19
實際測試結果:2^16
三、最靠譜的方法還是自己寫程序測試的結果
#include<unistd.h> #include<stdlib.h> #include<pthread.h> #include<stdio.h> void* foo(void* param) { } int main() { int i = 0; pthread_t thread; while (1) { if (pthread_create(&thread, NULL, foo, NULL) != 0) break; i ++; } printf("i = %d\n", i); }
編譯命令如下:
g++ main.cpp -o main -lpthread
執行結果:
[root@localhost]# ./main i = 32747