zoukankan      html  css  js  c++  java
  • linux 进程数

    一、linux系统支持的最大进程数

           限制1:既然系统使用pid_t表示进程号,那么最大进程数不能超过pid_t类型的最大值吧

           限制2:使用命令ulimit -u查看系统中限制的最大进程数,我的机器上是65535。/etc/security/limits.conf里面是硬限制,ulimit -u是软限制,内核参数kernel.pid_max也做了限制。

           限制3:受系统资源限制,创建一个新进程会消耗系统资源,最主要的就是内存,有人做过测试,在创建6千多个进程时,程序运行得很慢,通过vmstat命令观察,发现swap内存的置入置出很频繁,可以判断是由于内存不足,使用虚拟内存,导致频繁的IO操作,让测试代码变得很慢,所以创建过多进程时,系统的内存是重要衡量的一个方面。

    二、单进程最大线程数

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

           可以写一段简单的代码验证最多可以创建多少个线程 

    1. int main()  
    2. {  
    3.      int i = 0;  
    4.      pthread_t thread;  
    5.   
    6.      while (1) {  
    7.          if (pthread_create(&thread, NULL, foo, NULL) != 0)  
    8.              return;  
    9.          i ++;  
    10.          printf("i = %d ", i);  
    11.      }  
    12. }  
    int main()
    {
         int i = 0;
         pthread_t thread;
    
         while (1) {
             if (pthread_create(&thread, NULL, foo, NULL) != 0)
                 return;
             i ++;
             printf("i = %d
    ", i);
         }
    }

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

  • 相关阅读:
    页面加载完没有其他操作的情况下直接获取音频时长为NAN问题
    关于mysql的一些操作
    阿里云服务器登录不上 提示:之前用于连接到 (公网ip) 的凭据无法工作(1核1G) 以及阿里云新版本安全组策略没有开启80端口导致网站只能ping通 访问不到的问题
    微信浏览器禁止页面下拉查看网址(不影响页面内部scroll)
    2018年11月17号第一次参加源创会记录
    使用了eclipse10年之后,我终于投向了IDEA
    spring/spring boot/spring cloud书籍推荐
    python数据库连接例子
    Spring Cloud Eureka配置文件例子与较为详细说明
    spring源代码下载并导入eclipse技巧
  • 原文地址:https://www.cnblogs.com/lirong21/p/4151597.html
Copyright © 2011-2022 走看看