Linux创建进程到65535

2024-03-09 02:08
文章标签 linux 创建 进程 65535

本文主要是介绍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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/789223

相关文章

linux如何复制文件夹并重命名

《linux如何复制文件夹并重命名》在Linux系统中,复制文件夹并重命名可以通过使用“cp”和“mv”命令来实现,使用“cp-r”命令可以递归复制整个文件夹及其子文件夹和文件,而使用“mv”命令可以... 目录linux复制文件夹并重命名我们需要使用“cp”命令来复制文件夹我们还可以结合使用“mv”命令总

Python中多线程和多进程的基本用法详解

《Python中多线程和多进程的基本用法详解》这篇文章介绍了Python中多线程和多进程的相关知识,包括并发编程的优势,多线程和多进程的概念、适用场景、示例代码,线程池和进程池的使用,以及如何选择合适... 目录引言一、并发编程的主要优势二、python的多线程(Threading)1. 什么是多线程?2.

Linux使用cut进行文本提取的操作方法

《Linux使用cut进行文本提取的操作方法》Linux中的cut命令是一个命令行实用程序,用于从文件或标准输入中提取文本行的部分,本文给大家介绍了Linux使用cut进行文本提取的操作方法,文中有详... 目录简介基础语法常用选项范围选择示例用法-f:字段选择-d:分隔符-c:字符选择-b:字节选择--c

Java中对象的创建和销毁过程详析

《Java中对象的创建和销毁过程详析》:本文主要介绍Java中对象的创建和销毁过程,对象的创建过程包括类加载检查、内存分配、初始化零值内存、设置对象头和执行init方法,对象的销毁过程由垃圾回收机... 目录前言对象的创建过程1. 类加载检查2China编程. 分配内存3. 初始化零值4. 设置对象头5. 执行

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

Linux流媒体服务器部署流程

《Linux流媒体服务器部署流程》文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建... 目录流媒体服务器部署部署安装1.更新系统2.安装依赖组件3.解压4.编译安装(添加RTMP和openssl模块

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

linux下多个硬盘划分到同一挂载点问题

《linux下多个硬盘划分到同一挂载点问题》在Linux系统中,将多个硬盘划分到同一挂载点需要通过逻辑卷管理(LVM)来实现,首先,需要将物理存储设备(如硬盘分区)创建为物理卷,然后,将这些物理卷组成... 目录linux下多个硬盘划分到同一挂载点需要明确的几个概念硬盘插上默认的是非lvm总结Linux下多

Python创建Excel的4种方式小结

《Python创建Excel的4种方式小结》这篇文章主要为大家详细介绍了Python中创建Excel的4种常见方式,文中的示例代码简洁易懂,具有一定的参考价值,感兴趣的小伙伴可以学习一下... 目录库的安装代码1——pandas代码2——openpyxl代码3——xlsxwriterwww.cppcns.c