Mi experiencia es que mi tarea de alto conteo de procesos solo tuvo éxito con:
kern.maxproc=2500 # This is as big as I could set it.
kern.maxprocperuid=2048
ulimit -u 2048
Los dos primeros pueden entrar /etc/sysctl.conf
y el valor ulimit en launchd.conf, para una configuración confiable.
Como tcp / ip era parte de lo que estaba haciendo, también necesitaba aumentar
kern.ipc.somaxconn=8192
desde su defecto 128.
Antes de aumentar los límites del proceso, recibía fallas de "bifurcación", recursos insuficientes. Antes de aumentar kern.ipc.somaxconn, recibía errores de "tubería rota".
Esto fue mientras ejecutaba un número justo (500-4000) de procesos separados en mi monstruosa Mac, OS 10.5.7, luego 10.5.8, ahora 10.6.1. Bajo Linux en la computadora de mis jefes, simplemente funcionó.
Pensé que el número de procesos estaría más cerca de 1000, pero parece que cada proceso que comencé incluía su propia copia del shell además del elemento real que realizaba el trabajo real. Muy festivo
Escribí un juguete de exhibición que decía algo así como:
#!/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
y vi el número máximo de procesos en ps -ef y dando vueltas en netstat esperando a TIME_WAIT
que expiraran ... Con los límites elevados, vi más de 3500 TIME_WAIT
artículos en su punto máximo.
Antes de elevar los límites, podía "escabullirme" en el umbral de falla, que comenzó por debajo de 1K pero aumentó a un alto valor de 1190 ... cada vez que fue empujado al fracaso, podría tomar un poco más la próxima vez, probablemente debido a algo caché que se expandió a su límite cada vez que falló.
Aunque mi caso de prueba tenía una "espera" como su declaración final, todavía había MUCHOS procesos separados que esperaban después de salir.
Obtuve la mayor parte de la información que utilicé de las publicaciones en Internet, pero no toda fue precisa. Tu kilometraje puede variar.