千家信息网

怎么在Linux中创建进程达到65535

发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,这期内容当中小编将会给大家带来有关怎么在Linux中创建进程达到65535,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。//fork.c#include #incl
千家信息网最后更新 2024年11月11日怎么在Linux中创建进程达到65535

这期内容当中小编将会给大家带来有关怎么在Linux中创建进程达到65535,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

//fork.c#include #include #include #include #define MAXPROCESS 65535#define SLEEPTIME 60int 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系统

Linux是一种免费使用和自由传播的类UNIX操作系统,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统,使用Linux能运行主要的Unix工具软件、应用程序和网络协议。

上述就是小编为大家分享的怎么在Linux中创建进程达到65535了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

0