मैं निम्नलिखित बैश स्क्रिप्ट में समानांतर में कर्ल पृष्ठभूमि प्रक्रियाओं के थाउंसैंड चला रहा हूं
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
उन सीमाओं में से कुछ दिखाएगा।