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。

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

[cpp] view plaincopyprint?

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

     while (1) {
         if (pthread_create(&thread, NULL, foo, NULL) != 0)
             return;
         i ++;
         printf("i = %d\n", 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 库

时间: 2025-01-12 16:22:41

linux 进程数的相关文章

Linux进程数,句柄数,文件描述符是什么

linux文件句柄数 linux文件句柄数 1.问题阐述: too many open files:顾名思义即打开过多文件数. 不过这里的files不单是文件的意思,也包括打开的通讯链接(比如socket),正在监听的端口等等,所以有时候也可以叫做句柄(handle),这个错误通常也可以叫做句柄数超出系统限制. 2.产生的原因: 经常在使用linux的时候出现,大多数情况是由于程序没有正常关闭一些资源引起的,所以出现这种情况,请检查io读写,socket通讯等是否正常关闭. 3.经典案例: 很多

Linux中如何解除最大进程数和最大文件句柄打开数限制?

本文和大家分享的主要是linux中解除最大进程数和最大文件句柄打开数限制相关内容,一起来看看吧,希望对大家学习linux有所帮助. ulimit用于shell启动进程所占用的资源 1.语法格式: ulimit [-acdfHlmnpsStvw] [size] 2.参数介绍: -H 设置硬件资源限制. -S 设置软件资源限制. -a 显示当前所有的资源限制. -c size:设置core文件的最大值.单位:blocks -d size:设置数据段的最大值.单位:kbytes -f size:设置创

Linux 用户打开进程数的调整

Linux 用户打开进程数的调整 参考文章: 关于RHEL6中ulimit的nproc限制(http://www.cnblogs.com/kumulinux/archive/2012/12/16/2820609.html) !! 本文内容仅在 RHEL6.4 上测试通过.本文仅针对所有用户 1 查看nproc(max user processes)命令 [[email protected] ~]# ulimit -u 14866 2 修改nproc 临时修改, 重登录或重启后失效: [[emai

[Linux] 关于Centos6中ulimit nproc用户进程数的限制

一.缘由: 在启动mongodb的时候,有Warning提示soft rlimits too low,就是用户使用进程数过小,遂调高系统资源关于用户最大进程数的限制ulimit -u. 先暂时使设置生效,ulimit -u 102400,提示: ulimit: max user processes: cannot modify limit: Operation not permitted. 修改/etc/security/limits.conf 为 * soft nproc 102400,退出s

解除linux最大进程数和最大文件打开数

说明: linux对于每个用户,系统限制其最大进程数.为提高性能,可以根据设备资源情况,可设置各      linux用户的最大进程数和每个进程可打开的文件数 1. 查看Linux的最大进程数和最大打开文件数 : ulimit -a 2. 修改Linux的最大进程数和最大文件打开数 打开vim /etc/security/limits.conf 添加如下内容即可 *       soft    nproc   65535 *       hard    nproc   65535 *      

解除 Linux 系统的最大进程数和最大文件打开数限制

ulimit用于shell启动进程所占用的资源 1.类别: shell内建命令 2.语法格式: ulimit [-acdfHlmnpsStvw] [size] 3.参数介绍: -H 设置硬件资源限制. -S 设置软件资源限制. -a 显示当前所有的资源限制. -c size:设置core文件的最大值.单位:blocks -d size:设置数据段的最大值.单位:kbytes -f size:设置创建文件的最大值.单位:blocks -l size:设置在内存中锁定进程的最大值.单位:kbytes

linux上限制用户进程数、cpu占用率、内存使用率

限制进程CPU占用率的问题,给出了一个shell脚本代码如下: renice +10 `ps aux | awk '{ if ($3 > 0.8 && id -u $1 > 500) print $2}'` 其中用到ps获取进程信息,其实 ps中%CPU一列的意义是进程实际占有CPU时间和它存活时间的比值,这个值能反应进程对CPU的消耗,但不能准确反应进程所占CPU时间占整个系统CPU的百分比. 而top输出中的%CPU这一列正是进程所占CPU时间占整个系统CPU的百分比,用于

Linux中最大进程数和最大文件数

前言 Linux系统中可以设置关于资源的使用限制,比如:进程数量,文件句柄数,连接数等等. 在日常的工作中应该遇到过: -bash: fork: retry: Resource temporarily unavailable 或者 too many open files 这些类似的操作错误,前者是由于当前用户的进程数超出限制,后者由于当前用户的文件打开数超出限制. 下面就简单的介绍下配置用户进程数和文件打开数. 一.ulimit命令 Provides control over the resou

linux打开进程数测试

查看linux默认打开最大打开进程数 具体参考:https://www.jb51.net/article/143667.htm #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #define MAXPROCESS 65535 #define SLEEPTIME 60 int main(int argc, char **argv) { pid_t pi