মোড_উজগির মাধ্যমে জ্যাঙ্গো চালানোর সময় আমার ডাব্লুএসজিআইডিআইমনপ্রসেসে কয়টি প্রক্রিয়া নির্দিষ্ট করা উচিত?


23

ধরা যাক যে আমার কাছে দুটি বাক্স রয়েছে (সুপারউজার এবং সার্ভারফল্ট) তাদের নিজস্ব অ্যাপাচি ভার্চুয়াল হোস্ট থেকে একটি বাক্সে চলছে। দুটি সাইট জ্যাঙ্গো দ্বারা চালিত এবং মোড-ডাব্লুএসজি সহ অ্যাপাচে চলছে। সাইটের একটির জন্য একটি সাধারণ কনফিগারেশন ফাইল নীচের মত দেখতে পাবেন:

WSGIDaemonProcess serverfault.com user=www-data group=www-data processes=5

হোস্টটি একটি লিনাক্স মেশিন যার সাথে 4 গিগাবাইট র‌্যাম উবুন্টু চলছে। আমার 2 টি সাইটের জন্য আমার উপরে উল্লিখিত কতগুলি প্রক্রিয়া পরামর্শ দিতে পারে? আসুন ধরে নেওয়া যাক তাদের প্রকৃত সুপারসার এবং সার্ভারফল্ট সাইটগুলির মতোই ট্র্যাফিক রয়েছে।

উত্তর:


22

ওয়েল, কত ট্রাফিক না প্রকৃত superuser এবং Serverfault সাইট আছে? হাইপোথিটিক্যালস খুব বেশি ব্যবহার হয় না যদি উত্তরটি আরও সহজ করার জন্য তাদের কাছে পর্যাপ্ত তথ্য না থাকে ...

আপনার নিকৃষ্টতম প্রক্রিয়া গণনাটি প্রতি সেকেন্ডে অনুরোধের শীর্ষস্থানীয় নম্বর হওয়া উচিত যা আপনি সাইটটি পরিচালনা করতে সক্ষম হতে চান, প্রতি সেকেন্ডের অনুরোধের সংখ্যায় বিভক্ত হয়ে যদি সেই সমস্ত অনুরোধগুলি আপনার ধীরতম ক্রিয়াতে করা হয় তবে একটি প্রক্রিয়া হ্যান্ডেল করতে পারে (তাই) সেই ক্রমের প্রক্রিয়াকরণের সময়টির পারস্পরিক কাজ)। আপনার প্রশ্ন / সেকেন্ড এবং সময় পরিমাপের আস্থার ব্যবধানের উপর ভিত্তি করে আপনার উপযুক্ত মনে করা যাই হোক না কেন ফজ ফ্যাক্টর যুক্ত করুন।

গড় কেস গণনা একই, তবে আপনি প্রতিটি ক্রিয়াকলাপের জন্য প্রতি সেকেন্ডে আপনার অনুরোধের ওজনিত গড় দ্বারা রেক / সেকেন্ডকে ভাগ করে নিন (ওজন আপনি সেই নির্দিষ্ট ক্রিয়াকে আঘাত করার অনুরোধের শতাংশের পরিমাণ)। আবার, ফজ ফ্যাক্টরগুলি কার্যকর।

আপনি মেশিনে কতগুলি প্রক্রিয়া চালাতে পারবেন তার প্রকৃত উপরের সীমাটি প্রতিটি প্রক্রিয়াটির উপরের পরিমাণের মেমরির দ্বারা নির্ধারিত হয়; একটি প্রক্রিয়া গুছিয়ে নিন, তারপরে বিভিন্ন ধরণের স্মৃতি-ক্ষুধার্ত ক্রিয়াকলাপ চালান (সাধারণত যেগুলি প্রচুর তথ্য পুনরুদ্ধার করে এবং প্রক্রিয়াকরণ করে) সাধারণত একটি বাস্তবসম্মত ডেটা সেট (যদি আপনি পরীক্ষার জন্য খেলনা ডেটা সেট ব্যবহার করেন তবে 50 বা 100 বলুন) সারিগুলি, তারপরে যদি আপনার কোনও ক্রিয়া টেবিলের প্রতিটি সারিটি পুনরুদ্ধার করে এবং পরিচালনা করে তবে সেই টেবিলটি 10,000 সারিতে বাড়লে এটির পক্ষে ভাল মাপকাঠি হবে না) মেমরির ব্যবহার বেলুনগুলি কী করে তা দেখতে to আপনি যদি প্রান্তিকিকে খুব কম সেট করেন তবে আপনাকে কোনও মেমরি ব্যবহারের প্রান্তে পৌঁছে দেয় এমন কর্মীদের কাটায় এমন কোনও স্ক্রিপ্ট দিয়ে আপনার প্রতি-প্রক্রিয়া মেমরির ব্যবহারকে কৃত্রিমভাবে সীমাবদ্ধ করতে পারেন।

আপনার স্মৃতি ব্যবহারের চিত্রটি একবার পেয়ে গেলে আপনি সিস্টেমের ওভারহেডের জন্য কিছু পরিমাণ মেমোরি কেটে যান (আমি নিজেই 512 এমবি পছন্দ করি), একই মেশিনে চালিত অন্যান্য প্রক্রিয়াগুলি (ডাটাবেসের মতো) পেলে আরও একটি গাদা কেটে ফেলুন এবং তারপরে আপনার ডিস্কের ক্যাশে স্থানটি শেষ হয়ে গেছে না তা নিশ্চিত করার জন্য আরও কিছু (আপনার ডিস্কের কার্যকারিতা নির্ধারিত আকারের উপর নির্ভর করে তবে আবার আমি 512MB এর চেয়ে কম থাকব না)। সিলিংটি পেতে আপনার প্রতি-প্রক্রিয়া মেমরির ব্যবহার দ্বারা আপনি মেমরির পরিমাণটি ভাগ করেন।

আপনার পিক লোডটি পরিসেবা করার জন্য আপনার প্রয়োজনীয় প্রসেসের সংখ্যা যদি আপনি বাক্সে ফিট করতে পারেন এমন প্রসেসের সংখ্যার চেয়ে বেশি হয়, আপনার আরও মেশিনের প্রয়োজন (বা সহজ ক্ষেত্রে ডাটাবেসটিকে অন্য মেশিনে সরিয়ে নিতে)।

আপনি সেখানে কয়েক বছরের অভিজ্ঞতার স্কেলিং ওয়েবসাইটগুলির একটি ছোট এবং সাধারণ এসএফ পোস্টে নিযুক্ত করেছেন।


প্রক্রিয়া / থ্রেড সংখ্যার জন্য আরেকটি গুরুত্বপূর্ণ বিষয় হ'ল পৃথক অনুরোধগুলি পরিচালনা করতে কতক্ষণ সময় নিতে পারে এবং সমস্ত সম্ভাব্য দৈর্ঘ্যের সময়কালে সামগ্রিকভাবে ছড়িয়ে পড়ে। অন্য কথায়, একসাথে কতগুলি অনুরোধ পরিচালনা করা দরকার যা গড় প্রতিক্রিয়ার সময়ের চেয়ে বেশি সময় নেয়। সুতরাং, এটি কেবল তাত্ত্বিক অনুরোধ / সেকেন্ডের মতো সহজ নয় যতক্ষণ এই দীর্ঘ চলমান অনুরোধগুলির প্রভাব তাৎপর্যপূর্ণ হতে পারে এবং সামগ্রিক কনফিগারেশনের পরামিতিগুলিকে অপ্রয়োজনীয়ভাবে নির্দেশ করতে পারে। এফডাব্লুআইডাব্লু Mod_wsgi 3.0 এ কনফিগারেশনে সহায়তা করার জন্য এই সম্পর্কে ডেটা চেষ্টা এবং ক্যাপচারের জন্য পরিসংখ্যান সংগ্রহের কিছু অন্তর্নির্মিত অন্তর্ভুক্ত করবে।
গ্রাহাম ডাম্পলটন

@ গ্রাহাম: আমার উত্তরটি পুনরায় পড়ুন, আমি এটিকে কিছু বিশদভাবে কভার করেছি। অনুরোধ / সেকেন্ড কেবল প্রতিক্রিয়া সময়ের পারস্পরিক কাজ, এবং দশমিকের সাথে গুণ করার চেয়ে পূর্ণসংখ্যার রেক / সেকেন্ড দ্বারা ভাগ করা সহজ।
দোলা

আপনি কেবলমাত্র সবচেয়ে খারাপ ক্ষেত্রে প্রতিক্রিয়া ফোকাস করতে পারবেন না, বা কেবলমাত্র সেই বিষয়টির গড় গড় না। এটি সময়ের সাথে সাথে অনুরোধগুলির শতাংশের উপর নির্ভর করে উপায়গুলি ওজন করা প্রয়োজন, অর্থাৎ নেওয়া সমস্ত সম্ভাব্য সময়ে ছড়িয়ে পড়ে। আপনি যদি সত্যই আপনার সবচেয়ে খারাপ ক্ষেত্রে প্রতিক্রিয়া সময় গ্রহণ করেন তবে আপনি অবাস্তব প্রয়োজনীয়তা নিয়ে আসবেন। সমস্যাটি কী সূত্রটি ব্যবহার করা উচিত তা জানা খুব কঠিন। এই কারণেই মোড_উজি ৩.০-তে ইনবিল্ট পরিসংখ্যান সংগ্রহ করা হবে যা থ্রেডের ব্যবহার দেখায় এবং গণনা ও সময় অনুসারে কোন শতাংশের জন্য যে কোনও সংখ্যক থ্রেড যে কোনও এক সময় ব্যবহৃত হয়।
গ্রাহাম ডাম্পলটন

3
সমস্যাটি সম্ভবত আপনি কেবল প্রক্রিয়াগুলির দিকে তাকিয়ে রয়েছেন যেখানে প্রতিটি প্রক্রিয়া থ্রেডগুলি কীভাবে এতে ফ্যাক্টর ব্যবহার করে তা নিয়ে আমি উদ্বিগ্ন এবং এটি এত সহজ নয়। অন্য কথায়, যে ডাব্লুএসজিআইডিআইমনপ্রসেস নির্দেশিকাটি 5 টি প্রক্রিয়া নির্দেশ করে যেখানে প্রতিটি প্রক্রিয়াটি 15 টি থ্রেড ব্যবহার করে ডিফল্টরূপে হয়। আপনার বিবরণে যতটুকু পড়েছি ততই এটি একক থ্রেডেড প্রক্রিয়াগুলি ধরে নিয়েছে। যদি তা না হয় তবে আমাকে নির্দেশ করুন যে আপনার মডেল কীভাবে জিআইএল এর চারপাশে থ্রেড প্লাস কনটেন্ট / কনটেন্টিং / স্কেলিং সম্পর্কিত সমস্যাগুলি পূরণ করে। সুতরাং, যোগ্যতা অর্জন করুন যে আপনার বিবরণটি কেবল একক থ্রেডেড প্রক্রিয়াগুলির জন্য বৈধ এবং আমি তর্ক করব না।
গ্রাহাম ডাম্পলটন

2
আপনার পাইথন কোড এবং সমস্ত নির্ভরতা থ্রেড-সুরক্ষিত না হওয়ার বিষয়ে 99% নিশ্চিত না হওয়া অবধি "মাল্টিথ্রেডেড-অ্যাপাচি + মাল্টিপ্রসেসি-ডাব্লুজি" কি সেরা বাজির কাছে পৌঁছায় না?
টমাসজ জিয়েলসিস্কি

9

অল্পবিস্তর লোকদের উত্তরটি দুর্দান্ত, যদিও বুঝতে অসুবিধা বোধ না করে এবং অসুবিধার জন্য আবেদন করুন। আমি কিছু অনুশীলনমূলক সংখ্যা এবং "সাধারণ বিষয়বস্তু" বনাম "ই-বাণিজ্য" অ্যাপ্লিকেশন তুলনা দিতে চাই।

মোড_উজগির উপযুক্ত কনফিগারেশনের ক্ষেত্রে বিভিন্ন ব্যবহারের ক্ষেত্রে সেট করার আশেপাশে খুব বেশি উপাদান নেই, তাই আমি আশা করি এখানে একটু গদ্য ব্যবহার করা ঠিক আছে।

ক) সিএমএস সাইটস এবং মাইক্রোসাইটস

আমরা বেশ কয়েকটি গ্রাহক ওয়েবসাইট পরিচালনা করি, যার বেশিরভাগই মূলত কন্টেন্ট সাইট বা মাইক্রো সাইটগুলি হোস্টিং জ্যাঙ্গো সিএমএস, কিছু কাস্টম ফর্ম এবং কখনও কখনও নির্ধারিত ব্যাকগ্রাউন্ড কাজের জন্য সেলারি। এই সাইটগুলি সংস্থানগুলির জন্য ক্ষুধার্ত নয়, এর মধ্যে বেশিরভাগ 32 জিবি র‌্যাম সহ একক 4 কোর ইন্টেল সিওনের সমান্তরালে সুখে চলে। এই ধরণের সাইটগুলির জন্য আমরা এখানে কনফিগারেশন ব্যবহার করি:

WSGIDaemonProcess example.com user=www-data processes=2 maximum-requests=100

আমি একক সার্ভারে প্রায় 40 টি সাইট সম্পর্কে কথা বলছি, তাদের বেশিরভাগ স্টেজবাইয়ের সাথে তাদের স্টেজিং সাইটটি চলছে। 2 টি প্রক্রিয়া সহ (ডিফল্টরূপে 15 টি থ্রেড থাকা) সাইটগুলি ভালভাবে বন্ধ রয়েছে, যদিও তাদের সার্ভার সংস্থান বরাদ্দ করার ক্ষমতা সীমাবদ্ধ। এই সেটআপটি পর্যাপ্ত কেন (সিএমএস) আবেদনের সরল প্রকৃতির সাথে ন্যায়সঙ্গত হতে পারে: কোনও অনুরোধ কখনই পূরণ করতে কয়েক মিলি সেকেন্ডের বেশি নেবে বলে আশা করা যায় না। অ্যাপাচি সর্বদা স্বাচ্ছন্দ্য বজায় রাখবে, এবং সিপিইউ লোড হবে।

খ) ই-কমার্স সাইটগুলি

আমাদের করা আরও জটিল সাইটগুলি এখনও গণনামূলকভাবে সস্তার স্থানীয় অপারেশনগুলির দ্বারা চিহ্নিত করা হয় তবে বাহ্যিক নির্ভরতা (যেমন ওয়েব পরিষেবাগুলি বুকিং ডেটা সরবরাহ করে) যা লেনদেনের সময়ের ক্ষেত্রে ব্যয়বহুল। বাহ্যিক অনুরোধগুলির সাথে পরিচালিত ক্রিয়াকলাপগুলি দীর্ঘ সময় ধরে থ্রেড দখল করে রাখে, একই সংখ্যক ব্যবহারকারীর (উপরে থেকে একটি সাধারণ সিএমএস সাইটের তুলনায়) তুলনামূলক আপনার আরও থ্রেডের প্রয়োজন। আরও খারাপ, থ্রেডগুলি মাঝে মধ্যে অবরুদ্ধ থাকে যখন কোনও বাহ্যিক পরিষেবা তাত্ক্ষণিকভাবে কোনও অনুরোধের উত্তর দিতে না পারে, কখনও কখনও কয়েক সেকেন্ডের জন্য। এটি অপ্রীতিকর পার্শ্ব-প্রতিক্রিয়ার দিকে পরিচালিত করতে পারে যে থ্রেডগুলি একই পরিষেবা সারিটিতে অনুরোধ রাখে, যতক্ষণ না সমস্ত উপলভ্য Mod_wsgi থ্রেড ব্যবহার না করা এবং অপেক্ষায় অবরুদ্ধ থাকে।

এই পরিস্থিতিতে আমরা খুব 6বেশি পার্থক্য না দেখে প্রক্রিয়াগুলি ব্যবহার করার চেষ্টা করেছি এবং আমরা 12কার্য সম্পাদন এবং অপারেশনাল স্থিতিশীলতায় অতুলনীয় বুস্ট দেখে শেষ করেছি :

WSGIDaemonProcess example.com user=www-data processes=12 maximum-requests=100

150 এবং 250 সমান্তরাল ব্যবহারকারীদের সাথে কয়েকটি সাধারণ লোড টেস্টগুলি সহজেই সাইটটি ভাল প্রতিক্রিয়াশীল হয়ে পরিচালনা করা হয় (যখন 2প্রক্রিয়াগুলির সাথে সাইটটি সমান্তরালভাবে 50 জন ব্যবহারকারীকে ক্যাটারিং করে)। 32 জিবি র‌্যাম সহ 2 সিপিইউ 6 কোর ইন্টেল সিওন সেই লোডের অধীনে 25% সিপিইউ ব্যবহারের নীচে ভাল চলে, র‌্যামের ব্যবহার প্রায় 25% এরও কম স্থির থাকে। মনে রাখবেন যে আমরা এখানে কেবলমাত্র একটি সাইটের জন্য একটি উত্সর্গীকৃত মেশিন ব্যবহার করি, সুতরাং আমরা অন্যান্য সাইটগুলির প্রয়োজনীয় সংস্থানগুলি চুরি করব না।

উপসংহার

উচ্চ সংখ্যক প্রক্রিয়া ব্যবহার করা অ্যাপাচি সিস্টেমের উপলব্ধ সিস্টেম সংস্থান ব্যবহার করার অনুমতি দেওয়ার মধ্যে একটি বাণিজ্য বন্ধ। যদি আপনি "আক্রমণ" শর্তের অধীনে একটি স্থিতিশীল সার্ভার সিস্টেম (ওয়েবসাইট নয়!) রাখতে চান তবে সংখ্যাটি কম রাখুন। আপনি যদি চান যে অ্যাপাচি আপনাকে সিস্টেম রিসোর্স (সিপিইউ, র‌্যাম) ব্যবহার করে সাহায্য করতে পারে যখন প্রয়োজন হয় একটি উচ্চতর নম্বর চয়ন করুন। আপনি কতটা উঁচুতে যেতে পারবেন তা উপরের স্বীকৃত উত্তরে কিছুটা রূপরেখার মতো গণনা করে এবং শেষ পর্যন্ত উপলব্ধ সিপিইউ শক্তি এবং র‌্যাম দ্বারা সীমাবদ্ধ থাকে।

(পিএস: আমি অ্যাপাচি-এর মতো ব্যাকগ্রাউন্ড রিডিংয়ের জন্য আমার বালিশের অধীনে Modwsgi প্রজেক্ট উইকির কনফিগারেশন ডিরেক্টরীস বিভাগটি রাখি Also এছাড়াও আপনার অ্যাপাচি সার্ভারের উন্মুক্ত সংযোগগুলি বুঝতে এবং নিরীক্ষণ করতে ভুলবেন না ))


দুর্দান্ত পোস্ট, তবে আপনি কেন থ্রেড কাউন্ট সেট করবেন না? পাইথনের জিআইএল যেহেতু থ্রেডের অনেক সুবিধা উপেক্ষা করে, তাই ধরে নিয়েছি আপনি থ্রেডের চেয়ে আরও বেশি প্রক্রিয়া পেতে চান তবে থ্রেডের গণনা নির্দিষ্ট করার কোনও সুবিধা আছে কি?
Cerin

ডকুমেন্টেশন অনুসারে এর ডিফল্ট সংখ্যা threads15 । আমি মনে করি না যে এটি স্পষ্টভাবে নির্দিষ্ট করার একটি সুবিধা আছে। প্রকৃতপক্ষে, আমি মনে করি এটি কোনও কারণেই ছেড়ে দেওয়া হয়েছিল: এসও তে কিছু পোস্ট ছিল বা কিছু নথিভুক্তির একটি অংশ যা পার্শ্ব-প্রতিক্রিয়া এড়াতে মান বাদ দেওয়ার পরামর্শ দিয়েছিল (আমি জানি, এটি অদ্ভুত শোনায়)। দুর্ভাগ্যক্রমে, আমি এখন সেই উত্স খুঁজে পাই না। আপনার বাকি প্রশ্নের (জিআইএল) জন্য আপনি সম্ভবত আমার চেয়ে বেশি বিশেষজ্ঞ, দুঃখিত।
পিটারিনো 21

এই অভিজ্ঞতামূলক কনফিগারেশনের জন্য আপনাকে ধন্যবাদ। যাইহোক, মনে রাখবেন যে এই পোস্ট অনুযায়ীYou should never use maximum-requests in a production system unless you understand the implications and have a specific temporary need.
raratru
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.