আমি নীচের ব্যাশ স্ক্রিপ্টের সমান্তরালভাবে কার্ল পটভূমি প্রক্রিয়াগুলি চালাচ্ছি
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প্রসেস সংখ্যাটি কেবল 1-2 হাজারে বাড়িয়ে তুলি এবং তারপরে কমিয়ে 20-30 হয়ে যায় তবে পাইপিং কার্লের মাধ্যমে সাধারণ পার্সিং যুক্ত করি ...
প্রক্রিয়া সংখ্যা এত নাটকীয়ভাবে হ্রাস কেন? এই স্থাপত্যের সীমা কোথায়?
start=$SECONDSএবং end=$SECONDS- শেল ভেরিয়েবলের সাথে সম্ভাব্য নামের সংঘর্ষ এড়াতে অভ্যাস অনুসারে লোয়ার কেস বা মিক্সড কেস ভেরিয়েবলের নাম ব্যবহার করুন । তবে, আপনি প্রতিটি প্রক্রিয়া শুরু করার ক্ষেত্রে কেবলমাত্র ক্রমবর্ধমান সময়ের ব্যবধান পাচ্ছেন। প্রক্রিয়াটি ব্যাকগ্রাউন্ডে আসার পরে ডাউনলোডটি কতটা সময় নিয়েছে তা আপনি পাচ্ছেন না (এবং startএটি কেবল একবার গণনা করা হয়)। বাশ-এ, আপনি (( diff = end - start ))ডলারের চিহ্নগুলি বাদ দিয়ে এবং ব্যবধানটিকে আরও নমনীয় করে তোলার সুযোগ দিতে পারেন। আপনার কাছে pgrepথাকলে ব্যবহার করুন ।
awk) যখন আপনার প্রক্রিয়া গণনা অর্ধেক হয় লক্ষ্য করুন ।
parallelএবং এটি আমাকে বলেছে যে ফাইল হ্যান্ডলগুলি সিস্টেমের সীমাবদ্ধতার কারণে আমি মাত্র 500 সমান্তরাল কাজ চালাতে পারি। আমি সীমাবদ্ধতাগুলিতে সীমাবদ্ধতা বাড়িয়েছি, তবে এখন যখন আমি 5000 সিমুলানিয়াস কাজ চালানোর চেষ্টা করি তখন তা শুরু হওয়ার আগেই তাত্ক্ষণিকভাবে আমার সমস্ত স্মৃতি (49 গিগাবাইট) parallel খায় কারণ প্রতিটি পার্ল স্ক্রিপ্ট 32 এমবি খায়।
ulimitএই সীমাবদ্ধতাগুলির কিছু প্রদর্শন করবে।