ประสบการณ์ของฉันคืองานที่ต้องคำนึงถึงกระบวนการจำนวนมากประสบความสำเร็จกับ:
kern.maxproc=2500 # This is as big as I could set it.
kern.maxprocperuid=2048
ulimit -u 2048
สองรายการแรกสามารถเข้าไป/etc/sysctl.conf
และค่า ulimit ลงใน launchd.conf เพื่อการตั้งค่าที่เชื่อถือได้
เนื่องจาก tcp / ip เป็นส่วนหนึ่งของสิ่งที่ฉันทำฉันจึงจำเป็นต้องชน
kern.ipc.somaxconn=8192
จากค่าเริ่มต้น 128
ก่อนที่ฉันจะเพิ่มขีด จำกัด กระบวนการฉันได้รับความล้มเหลว "ทางแยก" ทรัพยากรไม่เพียงพอ ก่อนที่ฉันจะเพิ่ม kern.ipc.somaxconn ฉันได้รับข้อผิดพลาด "pipe เสีย"
นี่เป็นขณะที่รันจำนวนยุติธรรม (500-4000) ของกระบวนการเดี่ยวบน Mac สัตว์ประหลาดของฉัน, ระบบปฏิบัติการ 10.5.7, แล้ว 10.5.8, ตอนนี้ 10.6.1 ภายใต้ Linux บนคอมพิวเตอร์ของผู้บังคับบัญชามันทำงานได้ดี
ฉันคิดว่าจำนวนกระบวนการจะใกล้เคียงกับ 1,000 แต่ดูเหมือนว่าทุกกระบวนการที่ฉันเริ่มต้นรวมถึงสำเนาของเชลล์เองนอกเหนือจากรายการจริงที่ทำงานจริง เทศกาลมาก
ฉันเขียนของเล่นดิสเพลย์ที่มีลักษณะเหมือน:
#!/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 และแขวนอยู่รอบ ๆ ใน netstat ที่กำลังTIME_WAIT
จะหมดอายุ ... ด้วยขีด จำกัด ที่เพิ่มขึ้นฉันเห็นTIME_WAIT
รายการมากกว่า3,500 รายการ
ก่อนที่ฉันจะเพิ่มขีด จำกัด ฉันสามารถ 'แอบ' ขีดจำกัดความล้มเหลวซึ่งเริ่มต้นที่ต่ำกว่า 1K แต่เพิ่มขึ้นเป็น 1190 ค่าสูง .. ทุกครั้งที่มันถูกผลักจนล้มเหลวมันอาจต้องใช้เวลาอีกเล็กน้อย แคชที่ขยายเป็นขีด จำกัด ทุกครั้งที่ล้มเหลว
แม้ว่ากรณีทดสอบของฉันมี "รอ" เป็นคำสั่งสุดท้ายยังมีกระบวนการแยกเดี่ยวจำนวนมากแขวนอยู่รอบ ๆ หลังจากออก
ฉันได้รับข้อมูลส่วนใหญ่ที่ฉันใช้จากการโพสต์บนอินเทอร์เน็ต แต่ไม่ใช่ทั้งหมดที่ถูกต้อง ระยะของคุณอาจแตกต่างกันไป