La mia esperienza è che il mio compito ad alto numero di processi è riuscito solo con:
kern.maxproc=2500 # This is as big as I could set it.
kern.maxprocperuid=2048
ulimit -u 2048
I primi due possono andare in /etc/sysctl.conf
e il valore ulimit in launchd.conf, per un'impostazione affidabile.
Poiché tcp / ip faceva parte di ciò che stavo facendo, avevo anche bisogno di fare un salto di qualità
kern.ipc.somaxconn=8192
dal suo valore predefinito 128.
Prima di aumentare i limiti del processo, stavo ottenendo errori "fork", non abbastanza risorse. Prima di aumentare kern.ipc.somaxconn, stavo ricevendo errori "pipe spezzata".
Questo mentre eseguivo un discreto numero (500-4000) di processi distaccati sul mio mostro Mac, OS 10.5.7, quindi 10.5.8, ora 10.6.1. Sotto Linux sul computer dei miei capi ha funzionato.
Ho pensato che il numero di processi sarebbe stato più vicino a 1000, ma sembra che ogni processo che ho avviato includesse la propria copia della shell oltre all'elemento reale che faceva il lavoro effettivo. Molto festoso.
Ho scritto un giocattolo da esposizione simile a:
#!/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
e ho visto il numero massimo di processi in ps -ef e in giro in netstat in attesa TIME_WAIT
di scadere ... Con i limiti aumentati, ho visto 3500+ TIME_WAIT
oggetti al massimo.
Prima di innalzare i limiti, potevo "avvicinarmi di soppiatto" alla soglia di errore, che iniziava sotto 1K ma saliva a un valore elevato di 1190 .. ogni volta che veniva spinto in errore poteva richiedere un po 'di più la prossima volta, probabilmente a causa di qualcosa memorizzato nella cache che si espande al limite ogni volta che fallisce.
Sebbene il mio caso di test avesse un "attesa" come ultima affermazione, c'erano ancora MOLTI processi distaccati in giro dopo la sua uscita.
Ho ottenuto la maggior parte delle informazioni che ho usato dai post su Internet, ma non tutte erano accurate. Il tuo chilometraggio può variare.