Tecrübelerime göre yüksek işlem sayımlı görevim yalnızca şunları başardı:
kern.maxproc=2500 # This is as big as I could set it.
kern.maxprocperuid=2048
ulimit -u 2048
İlk /etc/sysctl.conf
ayar, güvenilir ayar için ulimit değeri launchd.conf dosyasına girebilir.
Tcp / ip benim yaptığım işin bir parçası olduğundan, ayrıca hızlandırmaya ihtiyacım vardı.
kern.ipc.somaxconn=8192
varsayılan 128’inden.
Süreç limitlerini artırmadan önce yeterli kaynak değil "çatal" hataları alıyordum. Kern.ipc.somaxconn yazılımını arttırmadan önce "kırılmış boru" hatalarıyla karşılaşıyordum.
Bu, benim canavar Mac, OS 10.5.7, daha sonra 10.5.8, şimdi 10.6.1'de oldukça fazla sayıda (500-4000) müstakil işlem yürütüyordu. Patronlarımın bilgisayarında Linux altında sadece çalıştı.
İşlem sayısının 1000'e yakın olacağını düşündüm, ancak başladığım her işlemin fiili işi yapan fiili öğeye ek olarak kabuğun kendi kopyasını da içeriyor gibi görünüyor. Çok şenlikli.
Gibi bir şey gitti bir ekran oyuncak yazdım:
#!/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
ve ps -ef'teki ve işlem TIME_WAIT
süresinin dolmasını bekleyen netstat'ta takılan maksimum işlem sayısını izledim TIME_WAIT
.
Sınırları yükseltmeden önce 1K'nın altında başlayan ama 1190 değerinde yükselen başarısızlık eşiğine 'gizlice girebiliyorum' .. her seferinde başarısızlığa itildiğinde, muhtemelen bir şey yüzünden biraz daha zaman alabilirdi Her başarısızlığında sınırını genişleten önbellek.
Test davamın son ifadesi olarak bir "bekletme" olmasına rağmen, çıktıktan sonra hala takılı kalan işlemlerin TESİSİ vardı.
İnternetteki kayıtlardan kullandığım bilgilerin çoğunu aldım, ancak hepsi doğru değildi. Milajınız değişebilir.