কিভাবে অ্যাপাচি টাইমআউটস ডিবাগ করবেন?


14

আমি অ্যাপাচি ২.২ সার্ভার (উবুন্টু সার্ভার 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 ইত্যাদি) কিন্তু কিছুই পাওয়া গেল না। পিএইচপি আবর্জনা সংগ্রহ প্রতি ঘন্টায় দু'বার সঞ্চালিত হয়, তবে স্পাইকগুলির সময় নয়, এখনও আমি এটি অক্ষম করার চেষ্টা করেছি তবে এতে কোনও পার্থক্য নেই।

স্পাইকের সময় প্রসেসগুলি দেখার জন্য আমি - টোপ-সিপিইউ এবং শীর্ষের সাথে ডিস্ট্যাট ব্যবহার করেছি এবং এটি যা দেখায় তা হ'ল অ্যাপাচি কয়েক সেকেন্ডের জন্য কঠোর পরিশ্রম করছে তবে অন্য কোনও প্রক্রিয়া উল্লেখযোগ্য সিপিইউ ব্যবহার করছে না।

আমি স্পাইকগুলির গ্রাফে একটি জুম তৈরি করেছি: জুমযুক্ত অনুরোধের প্রতিক্রিয়া সময়

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


1
আমি অনুরোধগুলি নিয়ে কিছু গ্রাফ সহ পোস্ট করতে চেয়েছিলাম, তবে আমার জবাব খুব কম।
লিওন

উত্তর:


4

আপনার প্রথম গ্রাফটি দেখে আমি প্রথমে নোট করি, মনে হচ্ছে একটি ঘন্টা ঘন্টা মন্দা (ঘন্টাখানেকের প্রায় 40 মিনিট আগে ঘটে) যা সমস্যার কারণ হতে পারে। আপনার ওএস / ডাটাবেসের টাস্ক শিডিয়ুলারের উপর নজর রাখা উচিত।

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


আপনার প্রতিক্রিয়ার জন্য ধন্যবাদ. আমি কী ঘণ্টার মধ্যে মন্দার কারণ হতে পারে তা সন্ধান করছি। মাঝামাঝি সময়ে আমি আমার কাছে ইতিমধ্যে থাকা ডেটাটির ফ্রিকোয়েন্সি প্লট তৈরি করেছি। এটির মধ্যে একটি টাইমআউট সমস্যা রয়েছে এমন URL গুলির মধ্যে এটি কেবলমাত্র একটি (তবে অন্যগুলি দেখতে খুব একই রকম দেখাচ্ছে): leela.kikora.no/apache_hist_show.png 10 সেকেন্ডেরও কম সময় লাগে এমন তুলনায় টাইমআউটগুলির পরিমাণ খুব সামান্য, তবে এটি দেখতে মনে হচ্ছে এটি লেজের অংশ নাও থাকতে পারে। তবে অন্যদিকে এটি কেবল এটিই হতে পারে যেহেতু তারা যে কোনও কিছু উপস্থাপন করে যা 50+ সেকেন্ড সময় নিয়েছে তাই এটি এমন দেখাবে বলে মনে করা হচ্ছে।
লিওন

3

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

সার্ভার ফল্ট ব্লগে একটি পোস্ট রয়েছে,Per Second Measurements Don't Cut It ... সম্ভবত এই জাতীয় অনুরোধগুলির মধ্যে কিছুটি একই সমস্যাতে চলছে যে সার্ভারফল্ট দলটি গিয়েছিল?

আমরা আবিষ্কার করেছি যে আমরা আমাদের গিগাবাইট / এস ইন্টারফেসে কেবল 10-30 এমবিট / সেকেন্ডের হারে প্যাকেটগুলি প্রায়শই ঘনঘন করছি যা আমাদের কার্যকারিতা ক্ষতিগ্রস্থ করে। এর কারণ এটি হ'ল 10-30 এমবিট / এস হারটি সত্যই 5 মিনিট প্রতি এক মিনিটে রূপান্তরিত বিটের সংখ্যা। যখন আমরা ওয়্যারশার্কের সাথে কাছাকাছি খুঁড়ে একটি মিলিসেকেন্ড আইও গ্রাফিং ব্যবহার করি, আমরা দেখেছিলাম আমরা প্রায়শই তথাকথিত 1 জিবিট / এস ইন্টারফেসের প্রতি মিলিসেকেন্ড হারে 1 এমবিট বিস্ফোরিত করব।


আকর্ষণীয়, আমি এটি একবার দেখুন। আমি মোড_রেকটাইমআউট সক্ষম করেছি এবং এটি রিকোয়েস্টটাইমটাইম হেডার = 20-40, মিনিট্রেট = 500 এবং রিকোয়েস্টটাইমআউটটাইম বডি = 10, মিনিট্রেট = 500 এবং প্রায় সমস্ত টাইমআউট এখন 10 সেকেন্ডে ঘটে। আমি এটি গ্রহণ করার অর্থ এই করি যে অনুরোধটির শরীরটি খুব দীর্ঘ সময় নেয় (শরীরটি কখনই বেশিরভাগ কয়েকশো বাইটের বেশি হওয়া উচিত নয়) তাই আমার কিছু ব্যবহারকারীর খারাপ যোগাযোগ রয়েছে বা আপনি বলেছেন যে আমার সার্ভারের দিকে কিছুটা ভিড় রয়েছে।
লিওন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.