Linux创建进程达到65535的方法

 更新时间:2018年07月12日 10:52:13   作者:ggjucheng  
这篇文章主要介绍了Linux创建进程达到65535的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

Linux上创建进程据说消耗很少,这个一直是Linux的特点,于是就专门测试Linux创建进程的极限,测试代码如下:

//fork.c
#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 pid;
  int count = 0;
  int maxprocess = MAXPROCESS;
  if (argc == 2) {
    maxprocess = atoi(argv[1]); 
  }
  for (count = 0; count < maxprocess; count++) {
    pid = fork();
    if (pid < 0) {
      perror("fork error");
      exit(1);
    } else if (pid == 0) {
      printf("child %d start\n", count);
      sleep(SLEEPTIME);
      printf("child %d end\n", count);
      exit(0);
    } 
    printf("parent:create %d child\n", count);
  }
  for (count = 0; count < MAXPROCESS; count++) {
    wait();
  }
  exit(0);
}

这段代码是不断创建子进程,默认是创建65535个进程,如果无法创建,就打印出错误。

测试代码是我新建的一个blue帐户进行运行测试,为了让进程尽可能创建多的进程,首先要设置blue帐户创建进程数的硬限制

使用root帐户修改/etc/security/limits.conf文件,加入一下行:

blue             hard    nproc          65535

然后为blue帐户设置创建进程的软限制,在终端执行如下代码:

ulimit -u 65535

到了这里,虽然我们设置blue帐户创建进程数的硬限制和软限制都是65535,但是我们还不能使用blue帐户创建65535个进程,我们在Linux还需要设置内核参数kernel.pid_max,这个参数我默认安装都是32768,所以即使使用root帐户,却不设置这个内核参数,整个系统最多可以创建的进程数就是32768,所以我们需要进行如下设置:

sysctl -w  kernel.pid_max=65535

备注:如果是使用root帐户执行程序,是不需要设置资源的硬限制和软限制,但是还是需要设置进程pid最大值的内核参数,才可以创建65535个进程。

接着在同一终端切换为blue帐户:

su blue

编译和执行测试代码:

gcc fork.c -o fork
./fork

我的虚拟机Linux内存是512M,在创建6千多个进程时,程序运行得很慢,通过vmstat命令观察,发现swap内存的置入置出很频繁,可以判断是由于内存不足,使用虚拟内存,导致频繁的IO操作,让测试代码变得很慢,所以创建过多进程时,系统的内存是重要衡量的一个方面。

后来我把测试代码放到一台配置比较好的至强服务器测试,内存是8G,在创建接近4W个进程时,程序的运行也到了瓶颈,依然是内存的瓶颈。

测试代码中,创建的子进程,占用的内存相当小,实际使用中,只可能比测试代码创建的进程使用更多的内存,所以相应的,同样配置的机器,能创建的可用进程应该是更少的。

总结

以上所述是小编给大家介绍的Linux创建进程达到65535的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • CentOS 7.2安装Nginx 1.10.2的详细教程

    CentOS 7.2安装Nginx 1.10.2的详细教程

    最近公司要切换VPS,所以打算使用最新的系统进行搭建LNMP,这篇文章是为CentOS 7.2安装Nginx 1.10.2的安装记录,记录下以便下次或者有需要的朋友们参考使用。下面跟着小编来一起学习学习吧。
    2016-11-11
  • centos7.6批量增加修改删除虚拟网卡操作介绍

    centos7.6批量增加修改删除虚拟网卡操作介绍

    大家好,本篇文章主要讲的是centos7.6批量增加修改删除虚拟网卡操作介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2021-12-12
  • 阿里云ECS(linux)一键安装web环境sh安装步骤

    阿里云ECS(linux)一键安装web环境sh安装步骤

    这篇文章主要介绍了阿里云ECS(linux)一键安装web环境sh安装步骤,需要的朋友可以参考下
    2016-10-10
  • linux 基础命令大全

    linux 基础命令大全

    学过Linux的人都会知道,Linux中的命令的确是非常多,但是玩过Linux的人也从来不会因为Linux的命令如此之多而烦恼,本文介绍了linux 基础命令,有兴趣的可以了解一下。
    2016-10-10
  • Linux下用SSH退出符切换SSH会话的实现方法

    Linux下用SSH退出符切换SSH会话的实现方法

    这篇文章主要介绍了Linux下用SSH退出符切换SSH会话的实现方法,需要的朋友可以参考下
    2015-07-07
  • 在CentOS中部署多节点Citus集群的详细步骤

    在CentOS中部署多节点Citus集群的详细步骤

    这篇文章主要给大家介绍了关于在CentOS中部署多节点Citus集群的详细步骤,文中将实现的步骤一步步介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-02-02
  • linux 类型  版本 内存 磁盘 查询命令介绍

    linux 类型  版本 内存 磁盘 查询命令介绍

    这篇文章介绍了linux 类型 、版本、内存、磁盘 查询命令,希望本篇文章可以帮助到大家的学习,喜欢本篇文章可以收藏一下方便下次浏览
    2021-11-11
  • centos 6.9 升级glibc动态库的详细过程

    centos 6.9 升级glibc动态库的详细过程

    glibc是gnu发布的libc库,即c运行库,glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。这篇文章主要介绍了centos 6.9 升级glibc动态库的详细过程,需要的朋友可以参考下
    2019-11-11
  • CentOS下.htaccess不起作用的解决方法

    CentOS下.htaccess不起作用的解决方法

    PHP 5.2的问题解决后,现在就是安装WordPress了。装好了没有任何问题,接下来继续配置WordPress,开启静态URL链接。然后手动编辑了.htaccess文件,将WordPress生成的相关代码拷贝进去了。
    2011-04-04
  • linux系统下安装visdom包出现报错问题及解决

    linux系统下安装visdom包出现报错问题及解决

    这篇文章主要介绍了linux系统下安装visdom包出现报错问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06

最新评论