Minha experiência é que minha tarefa de alta contagem de processos só conseguiu:
kern.maxproc=2500 # This is as big as I could set it.
kern.maxprocperuid=2048
ulimit -u 2048
Os dois primeiros podem entrar /etc/sysctl.conf
e o valor ulimit em launchd.conf, para uma configuração confiável.
Como tcp / ip fazia parte do que eu estava fazendo, eu também precisava aumentar
kern.ipc.somaxconn=8192
do seu padrão 128.
Antes de aumentar os limites do processo, eu estava recebendo falhas de "bifurcação", sem recursos suficientes. Antes de aumentar o kern.ipc.somaxconn, eu estava recebendo erros de "tubo quebrado".
Isso ocorreu durante a execução de um número razoável (500-4000) de processos desanexados no meu monstro Mac, OS 10.5.7, depois 10.5.8, agora 10.6.1. No Linux, no computador dos meus chefes, funcionava.
Eu pensei que o número de processos estaria mais próximo de 1000, mas parece que todo processo iniciado incluía sua própria cópia do shell, além do item real realizando o trabalho real. Muito festivo.
Eu escrevi um brinquedo de exibição que era algo 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
e observei o número máximo de processos no ps -ef e circulando no netstat esperando TIME_WAIT
expirar ... Com os limites aumentados, vi mais de 3500 TIME_WAIT
itens no pico.
Antes de aumentar os limites, eu podia 'esgueirar-me' do limiar de falha, que começava abaixo de 1K, mas subia para um valor alto de 1190 .. toda vez que era introduzido na falha, poderia demorar um pouco mais na próxima vez, provavelmente por causa de algo em cache que se expandia ao limite toda vez que falhava.
Embora meu caso de teste tivesse uma "espera" como declaração final, ainda havia MUITOS processos desanexados por aí depois que ele saiu.
Eu recebi a maioria das informações que usei de postagens na internet, mas nem todas eram precisas. Sua milhagem pode variar.