当前位置:  编程技术>c/c++/嵌入式

深入探讨linux下进程的最大线程数、进程最大数、进程打开的文件数

    来源: 互联网  发布时间:2014-10-15

    本文导语:  =====最大线程数====linux 系统中单个进程的最大线程数有其最大的限制 PTHREAD_THREADS_MAX这个限制可以在 /usr/include/bits/local_lim.h 中查看对 linuxthreads 这个值一般是 1024,对于 nptl 则没有硬性的限制,仅仅受限于系统的资...

=====最大线程数====
linux 系统中单个进程的最大线程数有其最大的限制 PTHREAD_THREADS_MAX
这个限制可以在 /usr/include/bits/local_lim.h 中查看
对 linuxthreads 这个值一般是 1024,对于 nptl 则没有硬性的限制,仅仅受限于系统的资源
这个系统的资源主要就是线程的 stack 所占用的内存,用 ulimit -s 可以查看默认的线程栈大小,一般情况下,这个值是 8M
可以写一段简单的代码验证最多可以创建多少个线程
代码如下:

int main()
{
     int i = 0;
     pthread_t thread;
     while (1) {
         if (pthread_create(&thread, NULL, foo, NULL) != 0)
             return;
         i ++;
         printf("i = %dn", i);
     }
}

试验显示,在 linuxthreads 上最多可以创建 381 个线程,之后就会返回 EAGAIN
在 nptl 上最多可以创建 382 个线程,之后就会返回 ENOMEM
这个值和理论完全相符,因为 32 位 linux 下的进程用户空间是 3G 的大小,也就是 3072M,用 3072M 除以 8M 得 384,但是实际上代码段和数据段等还要占用一些空间,这个值应该向下取整到 383,再减去主线程,得到 382。
那为什么 linuxthreads 上还要少一个线程呢?这可太对了,因为 linuxthreads 还需要一个管理线程
为了突破内存的限制,可以有两种方法
1) 用 ulimit -s 1024 减小默认的栈大小
2) 调用 pthread_create 的时候用 pthread_attr_getstacksize 设置一个较小的栈大小
要注意的是,即使这样的也无法突破 1024 个线程的硬限制,除非重新编译 C 库 /proc/sys/fs/file-max
# echo '32768' > /proc/sys/fs/inode-max

并将以上命令加到/etc/rc.c/rc.local文件中,以使系统每次重新启动时设置以上值。
在Linux内核2.4.x中需要修改原始码,然后重新编译内核才生效。编辑Linux内核原始码中的 include/linux/fs.h文件,
将 NR_FILE 由8192改为 65536,将NR_RESERVED_FILES 由10 改为 128。编辑fs/inode.c 文件将 MAX_INODE 由16384改为262144。
一般情况下,最大打开文件数比较合理的设置为每4M物理内存256,比如256M内存能设为16384,
而最大的使用的i节点的数目应该是最大打开文件数目的3倍到4倍。

    
 
 

您可能感兴趣的文章:

  • 深入分析父子线程、进程终止顺序不同产生的结果
  • 解析C#中用Process类杀死进程,执行命令的深入分析
  • 深入C语言内存区域分配(进程的各个段)详解
  • 进程间通信之深入消息队列的详解
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 如何深入了解线程
  • 深入多线程之:深入分析Interlocked
  • 深入多线程之:解析线程的交会(Thread Rendezvous)详解
  • 深入多线程之:深入生产者、消费者队列分析
  • 深入多线程之:双向信号与竞赛的用法分析
  • 深入多线程之:用Wait与Pulse模拟一些同步构造的应用详解
  • 深入Java线程中断的本质与编程原则的概述
  • 深入SQLite多线程的使用总结详解
  • 深入理解线程安全与Singleton
  • 深入多线程之:Wait与Pulse的使用详解
  • Java 多线程同步 锁机制与synchronized深入解析
  • 深入Sqlite多线程入库的问题
  • 深入多线程之:Reader与Write Locks(读写锁)的使用详解
  • 深入Android线程的相关问题解惑
  • 深入java线程池的使用详解
  • 深入Android Handler与线程间通信ITC的详解
  • Java线程中断的本质深入理解
  • Android开发笔记之:深入理解多线程AsyncTask
  • 深入多线程之:内存栅栏与volatile关键字的使用分析
  • 深入线程安全容器的实现方法
  • Docker支持更深入的容器日志分析
  • 关于《深入浅出MFC》
  • Linux有没有什么好的高级的书,我要深入,
  • 深入理解linux内核
  • [100分]有没有关于binutils的深入的资料?或者深入底层的资料?
  • 深入理解PHP内核 TIPI
  • 想深入学习Java应该学习哪些东西
  • 哪位有《JSP深入编程》电子版?
  • 想要深入学习LINUX该学什么?
  • 100分求:哪儿有《深入理解linux内核》可供下哉!
  • 如何深入Linux的内核学习?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3