অ্যাপাচি পারফরম্যান্স নাটকীয়ভাবে 6 256 একযোগে অনুরোধের উপরে হ্রাস করে


14

আমি একটি অপেক্ষাকৃত কম ট্রাফিক সাইট চালাচ্ছি যা সাইট আপডেটের পরে সপ্তাহে একবার দর্শকদের মধ্যে একটি বিশাল স্পাইক অনুভব করে। এই স্পাইকের সময়, সপ্তাহের বাকি অংশের তুলনায় সাইটের কার্য সম্পাদন অত্যন্ত দুর্বল। সার্ভারগুলিতে প্রকৃত লোডটি খুব কম থাকে, নির্ভরযোগ্যভাবে 10% সিপিইউ এর অধীনে এবং 30% র‌্যামের অধীনে (আমরা আসলে যা করছি তার জন্য হার্ডওয়্যারটি সম্পূর্ণ ওভারকিল হওয়া উচিত) তবে কোনও কারণে অ্যাপাচি পরিমাণের সাথে লড়াই করতে অক্ষম বলে মনে হচ্ছে অনুরোধ। আমরা আরএইচইল 5.7, কার্নেল 2.6.18-274.7.1.el5, x86_64 এ অ্যাপাচি 2.2.3 চালিয়ে যাচ্ছি।

অ্যাবি সহ বন্ধ ঘন্টা সময় এই আচরণ পুনরুত্পাদন করার চেষ্টা, আমি প্রায় 256 ব্যবহারকারী অতিক্রম করে যখন কর্মক্ষমতা একটি বড় ড্রপ খুঁজে পাচ্ছি। সবচেয়ে ছোট সম্ভাব্য ব্যবহারের ক্ষেত্রে পরীক্ষা চালিয়ে আমি আসতে পারি (স্থির পাঠ্য ফাইলটি পুনরুদ্ধার করা হচ্ছে, মোট 223 বাইট মোট) পারফরম্যান্স ধারাবাহিকভাবে 245 একযোগে অনুরোধের সাথে স্বাভাবিক:

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       15   25   5.8     24      37
Processing:    15   65  22.9     76      96
Waiting:       15   64  23.0     76      96
Total:         30   90  27.4    100     125

Percentage of the requests served within a certain time (ms)
  50%    100
  66%    108
  75%    111
  80%    113
  90%    118
  95%    120
  98%    122
  99%    123
 100%    125 (longest request)

তবে যত তাড়াতাড়ি আমি একসাথে 265 টি অনুরোধের জন্য ছদ্মবেশী হয়েছি, তাদের একটি উপসেট সম্পূর্ণ করার জন্য একটি অযৌক্তিক পরিমাণ সময় নেওয়া শুরু করে:

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       13  195 692.6     26    3028
Processing:    15   65  21.3     72     100
Waiting:       15   65  21.3     71      99
Total:         32  260 681.7    101    3058

Percentage of the requests served within a certain time (ms)
  50%    101
  66%    108
  75%    112
  80%    116
  90%    121
  95%   3028
  98%   3040
  99%   3044
 100%   3058 (longest request)

এই ফলাফলগুলি একাধিক রান জুড়ে খুব সামঞ্জস্যপূর্ণ। যেহেতু এই বাক্সে অন্য ট্র্যাফিক যাচ্ছে, তাই নিশ্চিতভাবেই নিশ্চিত না যে হার্ড কাটঅফটি কোথায় থাকবে, যদি তা থাকে তবে এটি সন্দেহজনকভাবে 256 এর কাছাকাছি বলে মনে হয়।

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

<IfModule prefork.c>
StartServers     512
MinSpareServers  512
MaxSpareServers  512
ServerLimit      512
MaxClients       512
MaxRequestsPerChild  5000
</IfModule>

মোড_স্ট্যাটাস নিশ্চিত করে যে আমি এখন 512 টি উপলব্ধ থ্রেড নিয়ে চালাচ্ছি

8 requests currently being processed, 504 idle workers

তবে, এক সাথে 265 টি অনুরোধ করার চেষ্টা করা এখনও আগেরটির মতো প্রায় একই রকম ফলাফল দেয়

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       25  211 714.7     31    3034
Processing:    17   94  28.6    103     138
Waiting:       17   93  28.5    103     138
Total:         57  306 700.8    138    3071

Percentage of the requests served within a certain time (ms)
  50%    138
  66%    145
  75%    150
  80%    161
  90%    167
  95%   3066
  98%   3068
  99%   3068
 100%   3071 (longest request)

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

সম্পাদনা করুন:

লাদাদাদাদের পরামর্শ অনুসারে আমি আপাচের বিরুদ্ধে সোজা হয়ে দৌড়ালাম। আমি কয়েকবার -t এবং -T দিয়ে চেষ্টা করেছি এবং সাধারণের থেকে কিছুই খুঁজে পেলাম না। আমি তারপরে বর্তমানে চলমান সমস্ত অ্যাপাচি প্রক্রিয়াগুলির বিরুদ্ধে স্ট্রেস-সি চালানোর চেষ্টা করেছি এবং এটি পেয়েছি:

% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 22.09    0.317836           5     62128      4833 open
 19.91    0.286388           4     65374      1896 lstat
 13.06    0.187854           0    407433           pread
 10.70    0.153862           6     27076           semop
  7.88    0.113343           3     38598           poll
  6.86    0.098694           1    100954     14380 read

(... abdridged)

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

সম্পাদনা 2:

বেশ কয়েকটি লোকের পরামর্শ অনুসারে, আমি নিজেই ওয়েব সার্ভারে আবার পরীক্ষা চালিয়েছি (আগে পরীক্ষাটি একটি নিরপেক্ষ ইন্টারনেট অবস্থান থেকে চালানো হয়েছিল)। ফলাফল বিস্ময়কর ছিল:

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   11   6.6     12      21
Processing:     5  247 971.0     10    4204
Waiting:        3  245 971.3      7    4204
Total:         16  259 973.3     21    4225

Percentage of the requests served within a certain time (ms)
  50%     21
  66%     23
  75%     24
  80%     24
  90%     26
  95%   4225
  98%   4225
  99%   4225
 100%   4225 (longest request)

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

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

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        1    2   0.8      2       4
Processing:    13  118  99.8    205     222
Waiting:       13  118  99.7    204     222
Total:         15  121  99.7    207     225

Percentage of the requests served within a certain time (ms)
  50%    207
  66%    219
  75%    220
  80%    221
  90%    222
  95%    224
  98%    224
  99%    225
 100%    225 (longest request)

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


বিবেচনা করার বিকল্পগুলি: ক্লাউডফ্লেয়ার, ড্রুপাল.আর / প্রকল্প / বুস্ট , সিডিএন, বার্নিশ ক্যাশে।
ceejayoz

এইচটিটিপি অনুরোধগুলি সরবরাহ করার পাশাপাশি এই সার্ভারটি (রিয়েল-ওয়ার্ল্ড) কী করছে সে সম্পর্কে আপনি কিছু বলছেন না। এর সাথে কি কোনও ডাটাবেস (বা অন্য কিছু সাধারণ উত্স জড়িত থাকতে পারে) জড়িত? সমস্যা হঠাৎ যদি সেটা হয় ঠিক 256 অনুরোধ (ঠিক আছে 255 কোণে) সেখানে সম্ভবত কিছু বহিরাগত রিসোর্স swamped হচ্ছে। (একটি স্থির পৃষ্ঠায় পরিবেশন করা আপনার জাম্প অবশ্যই অস্বাভাবিক - এটি কিছু ডিবাগ করার টিপসের জন্য লাদাদাদাদের উত্তর দেখুন)
ভোরেটাক 7

সিজেজোজ: আমি পরামর্শগুলির প্রশংসা করি, তবে মৌলিকভাবে আমি বিশ্বাস করি যে আপাচি এই ধীর হওয়া উচিত নয়। সমস্যার প্রভাব কমাতে আমরা অনেক কিছুই করতে পারি, তবে আমি বরং এটি ঠিক করতে বা কমপক্ষে বুঝতে পারি।
সেমসেকেন্ডারি

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

1
এটি কি সত্যিকারের সার্ভার বা ভিএম? আপনি কি স্থানীয় পরীক্ষা, স্থানীয় নেটওয়ার্ক বা ইন্টারনেট থেকে পরীক্ষা করেন? 100 মাইল পরিসরে ন্যূনতম প্রতিক্রিয়া বারগুলি ইন্টারনেট থেকে পরীক্ষার পরামর্শ দেয়। লোকালহোস্ট থেকে পরীক্ষা করার চেষ্টা করুন - সম্ভবত আপনার সরবরাহকারী আপনাকে কেবল থ্রোটল করছে।
টমেটজকি

উত্তর:


4

এই পরিস্থিতিতে আমি যা করতাম তা চালানো হয়

strace -f -p <PID> -tt -T -s 500 -o trace.txt

অ্যাব টেস্টের সময় আপনার আপাচি প্রক্রিয়াগুলির একটিতে যতক্ষণ না আপনি ধীর প্রতিক্রিয়াগুলির একটি ক্যাপচার করেন। তারপরে একবার দেখুন trace.txt

-ttএবং -Tঅপশন আপনাকে সাহায্য করার জন্য শুরু ও প্রতিটি সিস্টেমের কলের সময়কাল টাইমস্ট্যাম্পগুলি ধীর বেশী চিহ্নিত দেব।

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


-cবিকল্পটি খুঁজছেন ভাল ধারণা । আপনি কী নিশ্চিত করেছেন যে আপনি যে অ্যাপাচি সন্তানের সন্ধান করছেন সে কমপক্ষে একটি ধীরে ধীরে অনুরোধের অনুরোধ করেছিল? (আপনি straceসমস্ত বাচ্চাদের এক সাথে চালানো বাদ দিয়ে কীভাবে এটি করবেন তা আমি নিশ্চিত নই ))

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

যেহেতু আপনি বলেছিলেন যে সিপিইউ ব্যবহার কম থাকে, তাই সম্ভবত সিস্টেম কলগুলির মধ্যে এটি অতিরিক্ত জিনিস হয় না তবে এটি চেক করার মতো।


থেকে আউটপুট আরও ঘনিষ্ঠভাবে খুঁজছেন ab:

প্রতিক্রিয়া বারগুলিতে হঠাৎ লাফিয়ে যাওয়া (দেখে মনে হচ্ছে 150 মিমি এবং 3000 মিমি মধ্যে কোথাও কোনও প্রতিক্রিয়া সময় নেই) পরামর্শ দেয় যে কোথাও একটি নির্দিষ্ট সময়সীমা ঘটছে যা প্রায় 256 একযোগে সংযোগের উপর ট্রিগার হয়ে যায়। যদি আপনি র‌্যাম বা সিপিইউ চক্রের স্বাভাবিক আইও শেষ করে না থাকেন তবে একটি মসৃণ অবক্ষয় প্রত্যাশিত।

দ্বিতীয়ত, ধীর abপ্রতিক্রিয়া দেখায় যে 3000ms connectপর্যায়টি ব্যয় করেছিল । প্রায় সবগুলিই প্রায় 30 মিমি নিয়েছে তবে 5% 3000ms নিয়েছিল। এটি পরামর্শ দেয় যে নেটওয়ার্কটিই সমস্যা।

আপনি কোথা abথেকে ছুটে চলেছেন? আপনি কি আপাচি মেশিনের মতো একই নেটওয়ার্ক থেকে চেষ্টা করতে পারেন?

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

আপনার অ্যাক্সেস রয়েছে এমন কোনও নেটওয়ার্ক ডিভাইসের লগগুলি দেখার জন্য এটি উপযুক্ত হতে পারে। আমি সম্প্রতি আমাদের ফায়ারওয়ালগুলির সাথে একটির সমস্যার মধ্যে পড়েছিলাম যেখানে এটি কেবি / সেকেন্ডের ক্ষেত্রে ব্যান্ডউইথকে পরিচালনা করতে পারে তবে এটি প্রতি সেকেন্ডের প্যাকেটের সংখ্যাটি হ্যান্ডেল করতে পারে নি। এটি প্রতি সেকেন্ডে 140,000 প্যাকেটে শীর্ষে ছিল। আপনার abরান সম্পর্কে কিছু দ্রুত গণিত আমাকে বিশ্বাস করতে পরিচালিত করে যে আপনি প্রতি সেকেন্ডে প্রায় 13,000 প্যাকেট দেখছেন (5% ধীর অনুরোধগুলি উপেক্ষা করে)। সম্ভবত এটিই আপনি পৌঁছেছেন বাধা। এটি 256 এর কাছাকাছি হওয়ার ঘটনাটি নিখুঁতভাবে কাকতালীয় হতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.