当前位置: 技术问答>linux和unix
关于accept()函数能产生多少个套接字和在LINUX 能产生多少个线程
来源: 互联网 发布时间:2015-11-03
本文导语: 我这几天在编写关于LINUX网络程序,在我的程序中只能产生1024个左右accept()函数的套接字,所以只监听1024个左右的客户端,和我的程序要求的50000个差得太远, 还有我的程序只能生成302个线程,也太少了,请问哪位高手能给...
我这几天在编写关于LINUX网络程序,在我的程序中只能产生1024个左右accept()函数的套接字,所以只监听1024个左右的客户端,和我的程序要求的50000个差得太远, 还有我的程序只能生成302个线程,也太少了,请问哪位高手能给我指点一下,谢谢
|
accept没听说有1024的限制。你用select了吗?select有1024的限制。可以改用poll.
线程数的限制也没这么少,应该是7679。kernel 2.4.20.
线程数的限制也没这么少,应该是7679。kernel 2.4.20.
|
对于线程,应该是没有限制的,如果你没有限制的话。
ulimit -a
可以看到max user processes是否有限制。有限制的话,"ulimit -u 0"取消限制。
如果没有限制,最大进程数(最大线程数也是)在kernel里受到客用内存数限制,每个进程描述符需要一定内存,所有进程描述符所用内存不能超过可用内存数的一半。
ulimit -a
可以看到max user processes是否有限制。有限制的话,"ulimit -u 0"取消限制。
如果没有限制,最大进程数(最大线程数也是)在kernel里受到客用内存数限制,每个进程描述符需要一定内存,所有进程描述符所用内存不能超过可用内存数的一半。
|
在kernel/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);
/*
* we need to allow at least 20 threads to boot a system
*/
if(max_threads rlim[RLIMIT_NPROC].rlim_cur = max_threads/2;
init_task.signal->rlim[RLIMIT_NPROC].rlim_max = max_threads/2;
/*
* 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);
/*
* we need to allow at least 20 threads to boot a system
*/
if(max_threads rlim[RLIMIT_NPROC].rlim_cur = max_threads/2;
init_task.signal->rlim[RLIMIT_NPROC].rlim_max = max_threads/2;
|
x86(大雪) 说的是对的。
max_threads是由kernel使用内存大小来决定的。具体值可以这样看。
# cat /proc/sys/kernel/threads-max
或者
# sysctl -a | grep thread
max_threads是由kernel使用内存大小来决定的。具体值可以这样看。
# cat /proc/sys/kernel/threads-max
或者
# sysctl -a | grep thread