Pengalaman saya adalah bahwa tugas penghitungan proses tinggi saya hanya berhasil dengan:
kern.maxproc=2500 # This is as big as I could set it.
kern.maxprocperuid=2048
ulimit -u 2048
Dua yang pertama dapat masuk ke /etc/sysctl.conf
dan nilai ulimit ke launchd.conf, untuk pengaturan yang andal.
Karena tcp / ip adalah bagian dari apa yang saya lakukan, saya juga perlu menambahkan
kern.ipc.somaxconn=8192
dari default 128.
Sebelum saya meningkatkan batas proses, saya mengalami kegagalan "garpu", tidak cukup sumber daya. Sebelum saya meningkatkan kern.ipc.somaxconn, saya mendapatkan kesalahan "pipa rusak".
Ini saat menjalankan sejumlah proses (500-4000) terpisah pada monster saya Mac, OS 10.5.7, lalu 10.5.8, sekarang 10.6.1. Di Linux di komputer bos saya, itu hanya berfungsi.
Saya pikir jumlah proses akan mendekati 1000, tetapi tampaknya setiap proses yang saya mulai menyertakan salinan cangkangnya sendiri di samping item yang sebenarnya melakukan pekerjaan yang sebenarnya. Sangat meriah
Saya menulis mainan tampilan yang berbunyi seperti:
#!/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
dan menyaksikan jumlah maksimum proses dalam ps -ef dan berkeliaran di netstat menunggu untuk TIME_WAIT
kedaluwarsa ... Dengan batas yang ditingkatkan, saya melihat 3500+ TIME_WAIT
item di puncak.
Sebelum saya menaikkan batas saya bisa 'menyelinap' di ambang kegagalan, yang dimulai di bawah 1K tetapi naik ke nilai tinggi 1190 .. setiap kali didorong ke kegagalan itu bisa mengambil sedikit lebih banyak waktu berikutnya, mungkin karena sesuatu cache yang diperluas ke batasnya setiap kali gagal.
Meskipun test case saya memiliki "menunggu" sebagai pernyataan terakhir masih ada banyak proses terpisah berkeliaran setelah keluar.
Saya mendapatkan sebagian besar info yang saya gunakan dari posting di internet, tetapi tidak semuanya akurat. Jarak Anda mungkin beragam.