私の経験では、プロセス数の多いタスクは次の場合にのみ成功しました。
kern.maxproc=2500 # This is as big as I could set it.
kern.maxprocperuid=2048
ulimit -u 2048
/etc/sysctl.conf
信頼できる設定のために、最初の2つを入力し、ulimit値をlaunchd.confに入力できます。
tcp / ipは私がやっていることの一部だったので、バンプアップする必要もありました
kern.ipc.somaxconn=8192
デフォルトの128から。
プロセスの制限を増やす前に、十分なリソースではなく「フォーク」エラーが発生していました。kern.ipc.somaxconnを増やす前に、「パイプ破損」エラーが発生していました。
これは、モンスターMac、OS 10.5.7、そして10.5.8、現在10.6.1でかなりの数(500-4000)の切り離されたプロセスを実行しているときでした。私の上司のコンピューター上のLinuxの下ではうまくいきました。
プロセスの数は1000に近いと思いましたが、実際に作業を行っている実際のアイテムに加えて、私が開始したすべてのプロセスにはシェルの独自のコピーが含まれているようです。とてもお祭り。
私は次のようなもののディスプレイおもちゃを書きました:
#!/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
ps -efでプロセスの最大数を監視し、TIME_WAIT
有効期限が切れるのを待っているnetstatでぶらぶらしています...制限を引き上げると、3500以上のTIME_WAIT
アイテムがピークに達しました。
制限を上げる前に、1K未満から始まって1190の高い値に上がった障害のしきい値を「忍び寄る」ことができました。障害にプッシュされるたびに、おそらく何かのために、もう少し時間がかかる可能性があります失敗するたびにその限界まで拡張されたキャッシュ。
私のテストケースには最終ステートメントとして「待機」がありましたが、終了後も多くの切り離されたプロセスがぶらぶらしています。
私はインターネットでの投稿から使用した情報の大部分を入手しましたが、すべてが正確であったわけではありません。走行距離は異なる場合があります。