linux上建立程序據說消耗很少,這個一直是linux的特點,於是就專門測試linux建立程序的極限,測試**如下:
//這段**是不斷建立子程序,預設是建立65535個程序,如果無法建立,就列印出錯誤。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);
}
測試**是我新建的乙個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我的虛擬機器linux記憶體是512m,在建立6千多個程序時,程式執行得很慢,通過vmstat命令觀察,發現swap記憶體的置入置出很頻繁,可以判斷是由於記憶體不足,使用虛擬記憶體,導致頻繁的io操作,讓測試**變得很慢,所以建立過多程序時,系統的記憶體是重要衡量的乙個方面。./fork
後來我把測試**放到一台配置比較好的至強伺服器測試,記憶體是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...