আমি অ্যাপাচি ২.২ সার্ভার (উবুন্টু সার্ভার 10.04, 8x2GHz, 12 জিবি র্যাম) ব্যবহার করে একটি পিএইচপি ওয়েব অ্যাপ্লিকেশন চালাচ্ছি prefork
। প্রতিদিন আপাচি প্রায় 100k-200k অনুরোধ পেয়ে থাকে, এর মধ্যে প্রায় 100-200 টাইম আউট সীমা হিট করে (সুতরাং প্রতি হাজারে একজন), অন্য সমস্ত অনুরোধগুলি সময়সীমার নীচে খুব ভালভাবে পরিবেশন করা হয়।
কেন এমন হয় তা জানতে আমি কী করতে পারি? বা সমস্ত অনুরোধের কিছু ছোট অংশের সময় নির্ধারণ করা কি স্বাভাবিক?
আমি এ পর্যন্ত এটিই করেছি:
যেমন দেখা যায় যে খুব অল্প অনুরোধ রয়েছে যা সময়সীমা সীমা এবং আরও যুক্তিসঙ্গত অনুরোধের মধ্যে রয়েছে। বর্তমানে টাইমআউট সীমাটি 50 সেকেন্ডে সেট করা হয়েছে, পূর্বে এটি 300 এ সেট করা হয়েছিল এবং এটি এখনও কিছু সময়সীমা নিয়ে একই পরিস্থিতি এবং পরে অন্য অনুরোধগুলির চেয়ে বিশাল ব্যবধান ছিল।
সমস্ত অনুরোধ যে সময়সীমা AJAX
অতিক্রান্ত হয়, কিন্তু তারপরে সেগুলির সিংহভাগ হ'ল তাই সম্ভবত এটি একটি কাকতালীয় বিষয়। অ্যাপাচি রিটার্ন কোডটি রয়েছে 200
তবে সময়সীমা সীমাটি স্পষ্টভাবে পৌঁছে গেছে। তারা বিভিন্ন আইপি বিস্তৃত।
আমি যে অনুরোধগুলি বার হয়ে গেছে তার দিকে নজর রেখেছি এবং সেগুলি সম্পর্কে বিশেষ কিছু নেই, যদি আমি একই অনুরোধগুলি করি তবে তারা দ্বিতীয় সেকেন্ডের চেয়েও কম সময় পার করে।
আমি কারণগুলি খুঁজে পেতে পারি কিনা তা দেখার জন্য বিভিন্ন উত্সগুলিতে দেখার চেষ্টা করেছি তবে ভাগ্য নেই। সর্বদা প্রচুর ফ্রি মেমরি থাকে (সর্বনিম্ন 3 জিবি নিখরচায় থাকে), লোডটি কখনও কখনও 1.4 এবং সিপিইউ ব্যবহারের পরিমাণ 40% পর্যন্ত চলে যায় তবে লোড এবং সিপিইউ ব্যবহার কম হলে অনেক সময়সীমা শেষ হয়। দিনের বেলা ডিস্ক রাইটিং / পড়া বেশ ধ্রুব থাকে। মাইএসকিউএল স্লো ক্যোয়ারী লগটিতে (1 সেকেন্ডের উপরে কোনও কিছু লগ করার জন্য সেট করা) কোনও প্রবেশিকা নেই, কোনও অনুরোধটি ব্যবহার করে না যে অনেক ডাটাবেস লিখে / পড়ে।
নীল হল সিপিইউ ব্যবহার, যা 40% এ পৌঁছেছে, মেরুন 1.4 এ শিখরের সাথে লোড হয়। সুতরাং আমরা দেখতে পাচ্ছি যে আমরা কম সিপিইউ ব্যবহার / লোড নিয়েও টাইমআউট পেয়েছি (দশ সেকেন্ড স্পাইকগুলি সিপিইউ ব্যবহারের সাথে সুসংগত, তবে এটি অন্য একটি সমস্যা, এর কারণগুলি কী হতে পারে তা সন্ধানের জন্য আমার উচ্চ আশা রয়েছে)।
অ্যাপাচি ত্রুটি লগতে কোনও ত্রুটি নেই এবং এটি 200 টিরও বেশি সক্রিয় অ্যাপাচি প্রক্রিয়াগুলিতে পৌঁছতে দেখিনি।
সার্ভার সেটিংস:
Timeout 50
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 2
<IfModule mpm_prefork_module>
ServerLimit 350
StartServers 20
MinSpareServers 75
MaxSpareServers 150
MaxClients 320
MaxRequestsPerChild 5000
</IfModule>
হালনাগাদ:
আমি উবুন্টুকে 12.04.1 এ আপডেট করেছি, কেবলমাত্র যদি কোনও পরিবর্তন হয় না। আমি সেটিংসের সাথে মোড_আরকটাইমআউট যুক্ত করেছি:
RequestReadTimeout header=20-40,minrate=500
RequestReadTimeout body=10,minrate=500
এখন প্রায় সমস্ত টাইমআউটগুলি 10 সেকেন্ডে হয়, এক বা দুটি 20 সেকেন্ডে। আমি এর অর্থ গ্রহণ করি যে এটি বেশিরভাগ সময় অনুরোধের বডি পাচ্ছে যা পেতে সমস্যা? অনুরোধের বডিটি কয়েকশো বাইটের চেয়ে বড় কখনই হওয়া উচিত নয়। আমি প্রতি 1 সেকেন্ডের ভিত্তিতে নেটওয়ার্ক ট্র্যাফিক পর্যবেক্ষণ করেছি এবং এটি কখনই 1 এমবিট / সেকেন্ডের বেশি হয় না এবং সার্ভারটি 1 গিগাবাইট / স লাইনে রয়েছে এটি বিবেচনা করেও কোনও rxerrs বা rxdorps দেখতে পাচ্ছি না it হোপলেস এন00 বি পোস্ট করেছে। এটি কি কিছু খারাপ ব্যবহারকারীর সংযোগের ঘটনা হতে পারে?
প্রতি ঘণ্টায় স্পাইকগুলির জন্য (তারা মনে হয় উপরের গ্রাফগুলিতে তারা ঘন্টা খানেক আগে ৩৩ মিনিটের উপরে চলে গেছে, এখন তারা 12 মিনিটের অতীতে রয়েছে), আমি চেষ্টা করেছি যে পর্যায়ক্রমে কিছু চলছে কিনা ( crons ইত্যাদি) কিন্তু কিছুই পাওয়া গেল না। পিএইচপি আবর্জনা সংগ্রহ প্রতি ঘন্টায় দু'বার সঞ্চালিত হয়, তবে স্পাইকগুলির সময় নয়, এখনও আমি এটি অক্ষম করার চেষ্টা করেছি তবে এতে কোনও পার্থক্য নেই।
স্পাইকের সময় প্রসেসগুলি দেখার জন্য আমি - টোপ-সিপিইউ এবং শীর্ষের সাথে ডিস্ট্যাট ব্যবহার করেছি এবং এটি যা দেখায় তা হ'ল অ্যাপাচি কয়েক সেকেন্ডের জন্য কঠোর পরিশ্রম করছে তবে অন্য কোনও প্রক্রিয়া উল্লেখযোগ্য সিপিইউ ব্যবহার করছে না।
আমি স্পাইকগুলির গ্রাফে একটি জুম তৈরি করেছি:
আমার কাছে দেখে মনে হচ্ছে কিছুটা সেকেন্ডের জন্য অ্যাপাচি থামে এবং তারপরে থামার সময় যে অনুরোধগুলি এসেছিল তা প্রক্রিয়া করার জন্য কঠোর পরিশ্রম করে। কী কারণে এই ধরনের থামার কারণ হতে পারে বা আমি এটির ভুল ব্যাখ্যা দিচ্ছি?