控制Linux能够打开的最大进程数和最大系统线程数,有以下几个内核参数:
1> threads-max (/proc/sys/kernel/threads-max)
这个值表示物理内存决定的系统线程数上限。
可通过计算得出: max_threads = mempages / (8 * THREAD_SIZE / PAGE_SIZE);
涉及几个因子:
A、物理内存页数量
B、每个线程栈大小,即ulimit -s显示数据
C、每的页大小
说明:一般根据物理内存和线程栈大小可决定此参数的值。当调整线程栈大小时,此参数会有影响。
举例:# cat /proc/sys/kernel/threads-max
127440
2> pid_max (/proc/sys/kernel/pid_max)
这个值表示进程ID的上限。为了兼容旧版,默认为32768(即两个字节的一半,即power(2,15))。
举例:# cat /proc/sys/kernel/pid_max
32768
说明:此参数一般不需要调整,因为一般开启的进程数量不会如此之大。
3> RLIMIT_NPROC (ulimit -u 或者 getrlimit)
这个值表示单个用户允许的最大线程上限。系统默认为threads-max的一半。
举例:# ulimit -u
63720
配置方式:
A、/etc/security/limits.conf
* soft nofile 655350
* hard nofile 655350
B、/etc/security/limits.d/90-nproc.conf
* soft nproc unlimited
root soft nproc unlimited
说明:A和B配置中取较小值。
【小结】
需要调整参数如下:
1> ulimit -s 此参数不建议配置过大,一般1024K=1M即可
2> ulimit -u 此参数为threads-max一半即可。threads-max的值一般是固定的。
检查方式:可以启动一个进程后,查看进程相关限制数,如:cat /proc/<pid>/limits