[linux]最大线程数受多个原因制约
用 cat /proc/sys/kernel/threads-max 检查一下系统支持的最大线程数,一般来说数字都很大。但实际上用户创建线程的数量还是受几方面制约的。1、PTHREAT_THREAD_MAX 这个值描述了单个用户进程可创建的最大线程数,直接修改并无效果,得在修改后重新编译C库才能起作用,除非有特殊要求,否则就小题大做了。
2、linux 中每个线程分配的栈空间缺省为8M,分配给用户编程的地址空间为3G,因此纯理论上包括主线程在内最大线程数不超过 3 * 1024 / 8 = 384 个,加上代码段,数据段等开销,这个数字还要减少。因此减少每个线程的栈大小可以增加创建的线程数。
使用 pthread_create() 创建线程时可以用 pthread_attr_setstacksize() 函数来设置一个较小的栈大小。以此增加线程总数。这样做的好处是只影响程序本身。
也可以直接用 ulimit -s 修改缺省的栈大小。不过这样容易影响所有用户进程和线程,如非必要,不建议这样做。
3、用 uname -r 检查一下内核版本,如果使用的是2.4的内核,则线程是采用轻量级进程实现的,线程数是统计在进程基数中的。当很多使用线程的软件会开比较多的线程时,在数量上等同于开了相同数量的进程。所以可以通过 ulimit -u 检查一下用户创建最大线程数的大小,一般来说,很多系统都会把进程数设置为小于500,这样如果碰到线程开的太多的话自然容易出现问题。如果是 unlimited 则没有限制。
如果确实是这个原因,则可以修改 /etc/security/limits.conf 中的 nproc 项,至于格式,该文件里的注释已经说的很清楚了。基本上就是:
影响区域(如用户,组,软件名称等) 限制方式{硬性,柔性} SP 项目名称(如进程数,文件数等) SP 数值
修改最大进程数限制的具体实例如:(SP代表空格)
* SP soft SP nproc SP 1024
需要注意的是,由于修改 /etc/security/limits.conf 影响的是初始化时的用户环境,因此修改完毕后必须注销当前用户,重新登录后才会生效。
标签: linux
日历
最新微语
- 有的时候,会站在分叉路口,不知道向左还是右
2023-12-26 15:34
- 繁花乱开,鸟雀逐风。心自宁静,纷扰不闻。
2023-03-14 09:56
- 对于不可控的事,我们保持乐观,对于可控的事情,我们保持谨慎。
2023-02-09 11:03
- 小时候,
暑假意味着无忧无虑地玩很长一段时间,
节假意味着好吃好喝还有很多长期不见的小朋友来玩...
长大后,
这是女儿第一个暑假,
一个半月...
2022-07-11 08:54
- Watching the autumn leaves falling as you grow older together
2018-10-25 09:45
分类
最新评论
- Goonog
i get it now :) - 萧
@Fluzak:The web host... - Fluzak
Nice blog here! Also... - Albertarive
In my opinion you co... - ChesterHep
What does it plan? - ChesterHep
No, opposite. - mojoheadz
Everything is OK!... - Josephmaigh
I just want to say t... - ChesterHep
What good topic - AnthonyBub
Certainly, never it ...
发表评论: