मैं निम्नलिखित बैश स्क्रिप्ट में समानांतर में कर्ल पृष्ठभूमि प्रक्रियाओं के थाउंसैंड चला रहा हूं
START=$(date +%s)
for i in {1..100000}
do
curl -s "http://some_url_here/"$i > $i.txt&
END=$(date +%s)
DIFF=$(( $END - $START ))
echo "It took $DIFF seconds"
done
मेरे पास 49Gb Corei7-920 समर्पित सर्वर (वर्चुअल नहीं) है।
मैं मेमोरी खपत और सीपीयू को topकमांड के माध्यम से ट्रैक करता हूं और वे सीमा से बहुत दूर हैं।
मैं ps aux | grep curl | wc -lवर्तमान कर्ल प्रक्रियाओं की संख्या की गणना करने के लिए उपयोग कर रहा हूं । यह संख्या तेजी से 2-4 हजार तक बढ़ जाती है और फिर लगातार घटने लगती है।
अगर मैं curl | awk > outputकर्लिंग प्रक्रियाओं के माध्यम से पाइपिंग कर्ल से awk ( ) तक सरल पार्सिंग जोड़कर सिर्फ 1-2 हजार तक बढ़ाता हूं और फिर घटकर 20-30 ...
क्यों प्रक्रियाओं की संख्या इतनी नाटकीय रूप से घट जाती है? इस वास्तुकला की सीमाएं कहां हैं?
start=$SECONDSऔर end=$SECONDS- का उपयोग करें। हालाँकि, आप वास्तव में केवल प्रत्येक प्रक्रिया की शुरुआत के बढ़ते समय अंतराल को प्राप्त कर रहे हैं। आपको यह प्राप्त नहीं हो रहा है कि प्रक्रिया पृष्ठभूमि में कितनी देर से डाउनलोड हुई है (और startकेवल एक बार गणना की गई है)। बैश में, आप (( diff = end - start ))डॉलर के संकेतों को छोड़ने और रिक्ति को अधिक लचीला बनाने की अनुमति दे सकते हैं । pgrepअगर आपके पास है तो उपयोग करें ।
awk) करते हैं तो आपकी प्रक्रिया की संख्या आधी कैसे हो जाती है ।
parallelऔर यह कहता है कि मैं फ़ाइल हैंडल की सिस्टम सीमा के कारण सिर्फ 500 समानांतर कार्य चला सकता हूं। मैंने लिमिट्स में सीमा बढ़ा दी थी ।conf, लेकिन अब जब मैं 5000 सिमुलेंस जॉब चलाने की कोशिश करता हूं तो यह मेरी सभी मेमोरी (49 जीबी) को तुरंत शुरू होने से पहले ही parallel खा लेता है क्योंकि हर पर्ल स्क्रिप्ट 32Mb खाता है।
ulimitउन सीमाओं में से कुछ दिखाएगा।