Linux建立程序達到65535

2021-06-25 23:40:41 字數 1462 閱讀 6195

linux上建立程序據說消耗很少,這個一直是linux的特點,於是就專門測試linux建立程序的極限,測試**如下:

//

fork.c

#include #include #include #include

#define maxprocess 65535

#define sleeptime 60

int main(int argc, char **argv)

for (count = 0; count < maxprocess; count++) else

if (pid == 0)

printf("

parent:create %d child\n

", count);

}for (count = 0; count < maxprocess; count++)

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 核心內,程序是由相當大的乙個稱為 task struct 的結構表示的。此結構包含所有表示此程序所必需的資料,此外,還包含了大量的其他資料用來統計 accounting 和維護與其他程序的關係 父和子 下面給出了 task struct 的一小部分...

Linux 程序建立

1 linux建立程序的方式是先通過呼叫fork建立乙個和呼叫程序基本一樣的子程序,二者之間的區別在於pid和ppid不同。然後子程序呼叫exec函式裝載乙個新的程序到位址空間執行。其他的作業系統產生子程序的方式是spawn 在新的位址空間中建立程序,然後載入可執行檔案執行。2 傳統的fork是將所...

Linux程序 程序的建立

今天學習了linux的程序建立的基本原理,是基於0.11版本核心的。下面對其作一下簡單的總結。一 linux程序在記憶體中的相關資源 很容易理解,linux程序的建立過程就是記憶體中程序相關資源產生的過程,那麼linux程序在記憶體中有哪些相關資源呢?1 task陣列中的一項 乙個指標指向程序的ta...