Linux建立進程達到65535

來源:互聯網
上載者:User

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個進程時,程式的運行也到了瓶頸,依然是記憶體的瓶頸。

測試代碼中,建立的子進程,佔用的記憶體相當小,實際使用中,只可能比測試代碼建立的進程使用更多的記憶體,所以相應的,同樣配置的機器,能建立的可用進程應該是更少的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.