手机看片精品高清国产日韩,色先锋资源综合网,国产哺乳奶水91在线播放,乱伦小说亚洲色图欧洲电影

Linux創(chuàng)建進程達到65535的方法

2019-11-11 10:36:27 198

Linux上創(chuàng)建進程據(jù)說消耗很少,這個一直是Linux的特點,于是就專門測試Linux創(chuàng)建進程的極限,測試代碼如下:


//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)建子進程,默認是創(chuàng)建65535個進程,如果無法創(chuàng)建,就打印出錯誤。


測試代碼是我新建的一個blue帳戶進行運行測試,為了讓進程盡可能創(chuàng)建多的進程,首先要設(shè)置blue帳戶創(chuàng)建進程數(shù)的硬限制


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


blue             hard    nproc          65535


然后為blue帳戶設(shè)置創(chuàng)建進程的軟限制,在終端執(zhí)行如下代碼:


ulimit -u 65535


到了這里,雖然我們設(shè)置blue帳戶創(chuàng)建進程數(shù)的硬限制和軟限制都是65535,但是我們還不能使用blue帳戶創(chuàng)建65535個進程,我們在Linux還需要設(shè)置內(nèi)核參數(shù)kernel.pid_max,這個參數(shù)我默認安裝都是32768,所以即使使用root帳戶,卻不設(shè)置這個內(nèi)核參數(shù),整個系統(tǒng)最多可以創(chuàng)建的進程數(shù)就是32768,所以我們需要進行如下設(shè)置:


sysctl -w  kernel.pid_max=65535


備注:如果是使用root帳戶執(zhí)行程序,是不需要設(shè)置資源的硬限制和軟限制,但是還是需要設(shè)置進程pid最大值的內(nèi)核參數(shù),才可以創(chuàng)建65535個進程。


接著在同一終端切換為blue帳戶:


su blue


編譯和執(zhí)行測試代碼:


gcc fork.c -o fork

./fork

我的虛擬機Linux內(nèi)存是512M,在創(chuàng)建6千多個進程時,程序運行得很慢,通過vmstat命令觀察,發(fā)現(xiàn)swap內(nèi)存的置入置出很頻繁,可以判斷是由于內(nèi)存不足,使用虛擬內(nèi)存,導(dǎo)致頻繁的IO操作,讓測試代碼變得很慢,所以創(chuàng)建過多進程時,系統(tǒng)的內(nèi)存是重要衡量的一個方面。


后來我把測試代碼放到一臺配置比較好的至強服務(wù)器測試,內(nèi)存是8G,在創(chuàng)建接近4W個進程時,程序的運行也到了瓶頸,依然是內(nèi)存的瓶頸。


測試代碼中,創(chuàng)建的子進程,占用的內(nèi)存相當小,實際使用中,只可能比測試代碼創(chuàng)建的進程使用更多的內(nèi)存,所以相應(yīng)的,同樣配置的機器,能創(chuàng)建的可用進程應(yīng)該是更少的。


提交成功!非常感謝您的反饋,我們會繼續(xù)努力做到更好!

這條文檔是否有幫助解決問題?

非常抱歉未能幫助到您。為了給您提供更好的服務(wù),我們很需要您進一步的反饋信息:

在文檔使用中是否遇到以下問題: