linux进程创建线程数的制约

linux系统,用户创建线程的数量受几方面制约。

1、PTHREAT_THREAD_MAX 这个值描述了单个用户进程可创建的最大线程数,直接修改并无效果,得在修改后重新编译C库才能起作用,除非有特殊要求,否则就小题大做了。

2、linux 中每个线程分配的栈空间缺省为8M,分配给用户编程的地址空间为3G,因此纯理论上包括主线程在内最大线程数不超过 3 * 1024 / 8 = 384 个,加上代码段,数据段等开销,这个数字还要减少。因此减少每个线程的栈大小可以增加创建的线程数。使用 pthread_create() 创建线程时可以用 pthread_attr_setstacksize() 函数来设置一个较小的栈大小。以此增加线程总数。这样做的好处是只影响程序本身。但是要主要此函数是否调用成功,如果堆栈值设置太小的话,小于内存中的最小页面大小(2048K或其它),则此函数会调用失败,不同的操作系统,这个值是不同的,所以需要判断这个函数的返回。也可以直接用 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 影响的是初始化时的用户环境,因此修改完毕后必须注销当前用户,重新登录后才会生效。

 

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值