Z mojego doświadczenia wynika, że moje zadanie polegające na dużej liczbie procesów zakończyło się powodzeniem:
kern.maxproc=2500 # This is as big as I could set it.
kern.maxprocperuid=2048
ulimit -u 2048
Pierwsze dwa mogą wejść do, /etc/sysctl.conf
a wartość ulimit do launchd.conf, dla niezawodnego ustawienia.
Ponieważ tcp / ip było częścią tego, co robiłem, musiałem również zwiększyć wydajność
kern.ipc.somaxconn=8192
z domyślnego 128.
Zanim podniosłem limity procesu, dostawałem awarie „rozwidlenia”, za mało zasobów. Zanim zwiększyłem kern.ipc.somaxconn, otrzymywałem błędy „zepsutej rury”.
To było podczas uruchamiania sporej liczby (500-4000) odłączonych procesów na moim potwornym Macu, OS 10.5.7, potem 10.5.8, teraz 10.6.1. Pod Linuksem na komputerze moich szefów po prostu działało.
Myślałem, że liczba procesów będzie bliższa 1000, ale wydaje się, że każdy proces, który rozpocząłem, zawierał własną kopię powłoki oprócz rzeczywistego elementu wykonującego faktyczną pracę. Bardzo uroczyście.
Napisałem zabawkę displayową, która wyglądała mniej więcej tak:
#!/bin/sh
while[ 1 ]
do
n=netstat -an | wc -l
nw=netstat -an | grep WAIT | wc -l
p=ps -ef | wc -l
psh=ps -ef | fgrep sh | wc -l
echo "netstat: $n wait: $nw ps: $p sh: $psh"
sleep 0.5
done
i obserwowałem maksymalną liczbę procesów w ps -ef i krążyłem w sieci, czekając na TIME_WAIT
wygaśnięcie ... Po podniesieniu limitów widziałem ponad 3500 TIME_WAIT
przedmiotów w szczycie.
Zanim podniosłem granice, mogłem „podkraść się” do progu awarii, który zaczynał się poniżej 1K, ale wzrósł do wysokiej wartości 1190 .. za każdym razem, gdy popychano go w niepowodzenie, może zająć trochę więcej czasu, prawdopodobnie z powodu czegoś buforowane, które zwiększało się do limitu za każdym razem, gdy zawiodło
Chociaż mój przypadek testowy miał „czekać” jako ostateczne stwierdzenie, wciąż było mnóstwo odłączonych procesów wiszących po jego wyjściu.
Większość informacji, z których korzystałem, otrzymałem z postów w Internecie, ale nie wszystkie były dokładne. Twój przebieg może się różnić.