Linux創(chuàng)建進(jìn)程達(dá)到65535的方法
Linux上創(chuàng)建進(jìn)程據(jù)說消耗很少,這個(gè)一直是Linux的特點(diǎn),于是就專門測(cè)試Linux創(chuàng)建進(jìn)程的極限,測(cè)試代碼如下:
//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);
}
這段代碼是不斷創(chuàng)建子進(jìn)程,默認(rèn)是創(chuàng)建65535個(gè)進(jìn)程,如果無法創(chuàng)建,就打印出錯(cuò)誤。
測(cè)試代碼是我新建的一個(gè)blue帳戶進(jìn)行運(yùn)行測(cè)試,為了讓進(jìn)程盡可能創(chuàng)建多的進(jìn)程,首先要設(shè)置blue帳戶創(chuàng)建進(jìn)程數(shù)的硬限制
使用root帳戶修改/etc/security/limits.conf文件,加入一下行:
blue hard nproc 65535
然后為blue帳戶設(shè)置創(chuàng)建進(jìn)程的軟限制,在終端執(zhí)行如下代碼:
ulimit -u 65535
到了這里,雖然我們?cè)O(shè)置blue帳戶創(chuàng)建進(jìn)程數(shù)的硬限制和軟限制都是65535,但是我們還不能使用blue帳戶創(chuàng)建65535個(gè)進(jìn)程,我們?cè)贚inux還需要設(shè)置內(nèi)核參數(shù)kernel.pid_max,這個(gè)參數(shù)我默認(rèn)安裝都是32768,所以即使使用root帳戶,卻不設(shè)置這個(gè)內(nèi)核參數(shù),整個(gè)系統(tǒng)最多可以創(chuàng)建的進(jìn)程數(shù)就是32768,所以我們需要進(jìn)行如下設(shè)置:
sysctl -w kernel.pid_max=65535
備注:如果是使用root帳戶執(zhí)行程序,是不需要設(shè)置資源的硬限制和軟限制,但是還是需要設(shè)置進(jìn)程pid最大值的內(nèi)核參數(shù),才可以創(chuàng)建65535個(gè)進(jìn)程。
接著在同一終端切換為blue帳戶:
su blue
編譯和執(zhí)行測(cè)試代碼:
gcc fork.c -o fork ./fork
我的虛擬機(jī)Linux內(nèi)存是512M,在創(chuàng)建6千多個(gè)進(jìn)程時(shí),程序運(yùn)行得很慢,通過vmstat命令觀察,發(fā)現(xiàn)swap內(nèi)存的置入置出很頻繁,可以判斷是由于內(nèi)存不足,使用虛擬內(nèi)存,導(dǎo)致頻繁的IO操作,讓測(cè)試代碼變得很慢,所以創(chuàng)建過多進(jìn)程時(shí),系統(tǒng)的內(nèi)存是重要衡量的一個(gè)方面。
后來我把測(cè)試代碼放到一臺(tái)配置比較好的至強(qiáng)服務(wù)器測(cè)試,內(nèi)存是8G,在創(chuàng)建接近4W個(gè)進(jìn)程時(shí),程序的運(yùn)行也到了瓶頸,依然是內(nèi)存的瓶頸。
測(cè)試代碼中,創(chuàng)建的子進(jìn)程,占用的內(nèi)存相當(dāng)小,實(shí)際使用中,只可能比測(cè)試代碼創(chuàng)建的進(jìn)程使用更多的內(nèi)存,所以相應(yīng)的,同樣配置的機(jī)器,能創(chuàng)建的可用進(jìn)程應(yīng)該是更少的。
總結(jié)
以上所述是小編給大家介紹的Linux創(chuàng)建進(jìn)程達(dá)到65535的方法,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
CentOS 7.2安裝Nginx 1.10.2的詳細(xì)教程
最近公司要切換VPS,所以打算使用最新的系統(tǒng)進(jìn)行搭建LNMP,這篇文章是為CentOS 7.2安裝Nginx 1.10.2的安裝記錄,記錄下以便下次或者有需要的朋友們參考使用。下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2016-11-11
centos7.6批量增加修改刪除虛擬網(wǎng)卡操作介紹
大家好,本篇文章主要講的是centos7.6批量增加修改刪除虛擬網(wǎng)卡操作介紹,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下2021-12-12
阿里云ECS(linux)一鍵安裝web環(huán)境sh安裝步驟
這篇文章主要介紹了阿里云ECS(linux)一鍵安裝web環(huán)境sh安裝步驟,需要的朋友可以參考下2016-10-10
Linux下用SSH退出符切換SSH會(huì)話的實(shí)現(xiàn)方法
這篇文章主要介紹了Linux下用SSH退出符切換SSH會(huì)話的實(shí)現(xiàn)方法,需要的朋友可以參考下2015-07-07
在CentOS中部署多節(jié)點(diǎn)Citus集群的詳細(xì)步驟
這篇文章主要給大家介紹了關(guān)于在CentOS中部署多節(jié)點(diǎn)Citus集群的詳細(xì)步驟,文中將實(shí)現(xiàn)的步驟一步步介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-02-02
linux?類型??版本?內(nèi)存?磁盤?查詢命令介紹
這篇文章介紹了linux?類型?、版本、內(nèi)存、磁盤?查詢命令,希望本篇文章可以幫助到大家的學(xué)習(xí),喜歡本篇文章可以收藏一下方便下次瀏覽2021-11-11
centos 6.9 升級(jí)glibc動(dòng)態(tài)庫(kù)的詳細(xì)過程
glibc是gnu發(fā)布的libc庫(kù),即c運(yùn)行庫(kù),glibc是linux系統(tǒng)中最底層的api,幾乎其它任何運(yùn)行庫(kù)都會(huì)依賴于glibc。這篇文章主要介紹了centos 6.9 升級(jí)glibc動(dòng)態(tài)庫(kù)的詳細(xì)過程,需要的朋友可以參考下2019-11-11
linux系統(tǒng)下安裝visdom包出現(xiàn)報(bào)錯(cuò)問題及解決
這篇文章主要介紹了linux系統(tǒng)下安裝visdom包出現(xiàn)報(bào)錯(cuò)問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06

