日期:2014-05-16  浏览次数:20728 次

linux 能开的 最大 线程 和 进程 数 和什么有关?
linux 能开的 最大 线程 和 进程 数 和什么有关?核的数量 内存  操作系统  还是别的什么
有 什么样的 关系 呢!!????
------解决方案--------------------
linux内核的话,这个去看内核源码就好了。
linux-2.6.34的话定义在<linux/threads.h>中,其中有一段是这样的

/*
 * This controls the default maximum pid allocated to a process
 */
#define PID_MAX_DEFAULT (CONFIG_BASE_SMALL ? 0x1000 : 0x8000)

这个就是默认的PID大小,

默认是32768,也就是一个进程的最大的进程ID,那么这个值可以增加到几百万,
------解决方案--------------------
fork_init里有一段代码:
默认最大线程数是当线程结构只占1/8的内存页(注释有问题,还是一半)
而最大进程数则是线程数的一半
当然,这个max_threads可以通过/proc/sys/kernel/threads-max来手动修改

 * 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 < 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;