Ich habe die Erfahrung gemacht, dass meine Aufgabe mit hoher Prozessanzahl nur erfolgreich war mit:
kern.maxproc=2500 # This is as big as I could set it.
kern.maxprocperuid=2048
ulimit -u 2048
Die ersten beiden können in /etc/sysctl.conf
die Datei launchd.conf und der Wert ulimit für eine zuverlässige Einstellung eingegeben werden.
Da TCP / IP ein Teil meiner Arbeit war, musste ich mich auch anstrengen
kern.ipc.somaxconn=8192
von seiner Standardeinstellung 128.
Bevor ich die Prozessgrenzen erhöht habe, gab es Gabelungsfehler, nicht genügend Ressourcen. Bevor ich kern.ipc.somaxconn vergrößerte, bekam ich "broken pipe" -Fehler.
Dies geschah, während auf meinem Monster Mac, OS 10.5.7, dann 10.5.8, jetzt 10.6.1, eine ganze Reihe (500-4000) getrennter Prozesse ausgeführt wurden. Unter Linux auf dem Computer meines Chefs hat es einfach funktioniert.
Ich dachte, dass die Anzahl der Prozesse näher bei 1000 liegen würde, aber es scheint, dass jeder Prozess, den ich gestartet habe, zusätzlich zu dem eigentlichen Gegenstand, der die eigentliche Arbeit erledigt, eine eigene Kopie der Shell enthielt. Sehr festlich
Ich habe ein Ausstellungsspielzeug geschrieben, das ungefähr so aussah:
#!/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
und beobachtete die maximale Anzahl von Prozessen in ps -ef und wartete in netstat darauf TIME_WAIT
, dass sie abliefen TIME_WAIT
.
Bevor ich die Grenzen anhob, konnte ich mich an die Ausfallschwelle heranschleichen, die unterhalb von 1K begann, aber auf einen hohen Wert von 1190 anstieg. Jedes Mal, wenn es zu einem Ausfall kam, konnte es das nächste Mal ein wenig länger dauern, wahrscheinlich wegen etwas jedes Mal, wenn ein Fehler auftrat, wurde der Cache bis an sein Limit erweitert.
Obwohl mein Testfall eine "Wartezeit" als letzte Anweisung hatte, gab es nach dem Beenden VIELE getrennte Prozesse.
Ich habe die meisten Informationen, die ich verwendet habe, aus Beiträgen im Internet erhalten, aber nicht alle waren korrekt. Ihre Laufleistung kann variieren.