Linux创建进程达到65535的方法

作者:ggjucheng 时间:2023-10-10 09:34:11 

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的方法,希望对大家有所帮助

来源:https://www.cnblogs.com/ggjucheng/archive/2012/02/10/2344961.html

标签:linux,进程
0
投稿

猜你喜欢

  • WordPress 3.0五大新特征

    2010-05-11 16:38:00
  • Windows缓存写入失败故障分析

    2007-04-23 15:11:00
  • Windows 2003 Server安全配置指南

    2008-12-22 16:26:00
  • 吕英建SEO讲课记录 如何提高网站的权重

    2009-02-12 10:46:00
  • V5MALL进入最后封装阶段,预计12月初免费对外发行

    2009-11-26 18:45:00
  • 王川:你的商业模式完整吗?

    2008-12-29 10:46:00
  • centos 7 安装卸载apache(httpd)服务的详细步骤

    2023-08-26 00:51:50
  • Linux系统下发送Email的C语言代码

    2010-03-12 18:58:00
  • 搜索优化服务行业的前景与发展趋势全解析

    2008-12-10 09:14:00
  • 企业Sendmail邮件服务器的创建(3)

    2008-02-18 13:32:00
  • Docker 安装启动Jenkins的方法(docker-compose)

    2021-12-28 12:56:57
  • 固若金汤 网站后台不容忽视的几个安全问题

    2009-01-30 02:25:00
  • UUcall负责人首次解释停服:我们不会圈钱跑路

    2009-10-12 08:39:00
  • 用ASP的安全验证对windows 2000的密码进行修改

    2008-04-13 06:58:00
  • 哈,怎么跑到这里来问了?进来看

    2008-10-30 17:15:00
  • 美国主机webhostingpad介绍

    2010-03-28 08:05:00
  • 谷歌公司呼吁:立即行动起来正视搜索公正

    2008-11-17 13:59:00
  • 高手进阶:构建DNS服务器简易指南

    2009-08-07 11:03:00
  • Windows10下hyperledger fabric1.4环境搭建过程图解

    2023-08-05 17:54:42
  • Windows2000下DNS和活动目录关系浅析

    2010-01-28 18:52:00
  • asp之家 网站运营 m.aspxhome.com