अब लोड परीक्षण


194

क्या कोई कृपया मुझे इस प्रक्रिया के माध्यम से चल सकता है कि मैं कैसे अपाचे बेंच टूल ( ab) का उपयोग करके अपनी वेबसाइट का परीक्षण लोड कर सकता हूं ?

मैं निम्नलिखित जानना चाहता हूं:

प्रति मिनट कितने लोग साइट को संभाल सकते हैं?

कृपया मुझे इस आदेश के माध्यम से चलें जो मुझे यह पता लगाने के लिए चलना चाहिए।

मैंने हर ट्यूटोरियल की कोशिश की, और वे भ्रमित कर रहे हैं।

जवाबों:


314

अपाचे बेंचमार्क टूल बहुत बुनियादी है, और जब यह आपको कुछ प्रदर्शन का एक ठोस विचार देगा, तो यह केवल इस पर निर्भर करने के लिए एक बुरा विचार है कि क्या आप अपनी साइट को उत्पादन में गंभीर तनाव के संपर्क में लाने की योजना बनाते हैं।

कहा कि, यहाँ सबसे आम और सरल पैरामीटर हैं:

-c: ("कंसीडर")। इंगित करता है कि एक ही समय में कितने ग्राहक (लोग / उपयोगकर्ता) साइट को मारेंगे। जबकि abरन, -cसाइट को मारने वाले ग्राहक होंगे । यह वही है जो वास्तव में आपकी साइट को बेंचमार्क के दौरान तनाव की मात्रा का फैसला करता है।

-n: इंगित करता है कि कितने अनुरोध किए जा रहे हैं। यह सिर्फ बेंचमार्क की लंबाई तय करता है। आपके सर्वर का समर्थन कर सकने वाले -nमान के साथ एक उच्च मूल्य -cयह सुनिश्चित करने के लिए एक अच्छा विचार है कि चीजें निरंतर तनाव के तहत नहीं टूटती हैं: यह 5 घंटे के लिए 5 सेकंड के लिए तनाव का समर्थन करने के लिए समान नहीं है।

-k: यह "KeepAlive" फंक्शनलिटी ब्राउज़र प्रकृति द्वारा करता है। आपको इसके लिए एक मान पास करने की आवश्यकता नहीं है -kक्योंकि यह "बूलियन" है (इसका अर्थ है: यह इंगित करता है कि आप HTTP से अलाइव हेडर का उपयोग करने और कनेक्शन को बनाए रखने के लिए अपने परीक्षण की इच्छा रखते हैं)। चूंकि ब्राउज़र ऐसा करते हैं और आप तनाव और प्रवाह को अनुकरण करना चाहते हैं जो आपकी साइट के ब्राउज़र से होगा, यह अनुशंसा की जाती है कि आप इसके साथ एक बेंचमार्क करें।

अंतिम तर्क केवल मेजबान है। यदि आप इसे निर्दिष्ट नहीं करते हैं तो डिफ़ॉल्ट रूप से यह http: // प्रोटोकॉल से टकराएगा।

ab -k -c 350 -n 20000 example.com/

ऊपर दिए गए आदेश को जारी करके, आप 20 हजार अनुरोधों के पूरा होने तक 350 एक साथ कनेक्शन के साथ http://example.com/ मारेंगे । यह जीवित हेडर का उपयोग करके किया जाएगा।

प्रक्रिया 20 हजार अनुरोधों को पूरा करने के बाद, आपको आंकड़ों पर प्रतिक्रिया प्राप्त होगी। यह आपको बताएगा कि ऊपर दिए गए मापदंडों का उपयोग करते समय आपके द्वारा डाले गए तनाव के तहत साइट ने कितना अच्छा प्रदर्शन किया।

यह पता लगाने के लिए कि साइट कितने लोगों को एक ही समय में संभाल सकती है, बस देखें कि क्या प्रतिक्रिया समय (मतलब, न्यूनतम और अधिकतम प्रतिक्रिया समय, विफल अनुरोध आदि) आपकी साइट स्वीकार कर सकते हैं (विभिन्न साइटें अलग गति की इच्छा कर सकती हैं)। आप उपकरण को विभिन्न -c मानों के साथ चला सकते हैं जब तक कि आप उस स्थान पर न टकराएं जहां आप कहते हैं "यदि मैं इसे बढ़ाता हूं, तो यह विफल अनुरोध प्राप्त करना शुरू कर देता है और यह टूट जाता है"।

आपकी वेबसाइट के आधार पर, आप प्रति मिनट औसतन अनुरोधों की अपेक्षा करेंगे। यह बहुत भिन्न होता है, आप इसे अब के साथ अनुकरण नहीं कर पाएंगे। हालाँकि, इसके बारे में इस तरह से सोचें: यदि आपका औसत उपयोगकर्ता प्रति मिनट 5 अनुरोधों को मार रहा होगा और आपके द्वारा मान्य औसत प्रतिक्रिया समय 2 सेकंड है, तो इसका मतलब है कि एक मिनट में 10 सेकंड 1 उपयोगकर्ता अनुरोधों पर होगा, जिसका अर्थ केवल है समय के 1/6 यह साइट मार जाएगा। इसका मतलब यह भी है कि यदि आपके पास 6 उपयोगकर्ता हैं जो एक साथ ab के साथ साइट मार रहे हैं, तो आपके पास सिमुलेशन में 36 उपयोगकर्ता होने की संभावना है, भले ही आपका समसामयिक स्तर (-c) केवल 6 हो।

यह साइट का उपयोग करने वाले आपके उपयोगकर्ताओं से आपके द्वारा अपेक्षित व्यवहार पर निर्भर करता है, लेकिन आप इसे "मैं अपने उपयोगकर्ता से प्रति मिनट एक्स अनुरोध हिट करने की अपेक्षा करता हूं और मैं औसत प्रतिक्रिया समय को वैध मानता हूं यदि यह 2 सेकंड है"। फिर बस अपने -c स्तर को संशोधित करें जब तक कि आप औसत प्रतिक्रिया समय के 2 सेकंड नहीं मार रहे हैं (लेकिन सुनिश्चित करें कि अधिकतम प्रतिक्रिया समय और stddev अभी भी मान्य है) और देखें कि आप कितना बड़ा कर सकते हैं -c।

मुझे आशा है कि मैंने यह स्पष्ट समझाया :) शुभकामनाएँ


5
सीधा और स्पष्ट जवाब! क्या आप इस बारे में थोड़ा और अधिक बता सकते हैं कि आपको यह क्यों मिला है "इसका अर्थ यह भी है कि यदि आपके पास 6 उपयोगकर्ता हैं जो एक साथ ab को मार रहे हैं, तो आपके सिमुलेशन में 36 उपयोगकर्ता होने की संभावना है, भले ही आपका समसामयिक स्तर (-c) केवल 6. "
केबरियोटिस

3
बस एक अनुस्मारक, आप शायद -lविकल्प जोड़ना चाहते हैं यदि पृष्ठ में गतिशील सामग्री है, तो इस तरह से आपको अनुरोधों के बीच सामग्री-लंबाई भिन्न होने के कारण विफल अनुरोधों का एक गुच्छा नहीं मिलता है।
JCM

73

कृपया मुझे इस आदेश के माध्यम से चलें जो मुझे यह पता लगाने के लिए चलना चाहिए।

सबसे सरल परीक्षण जो आप कर सकते हैं, एक बार में 1000 अनुरोध, 10 का प्रदर्शन करना है (जो लगभग 10 समवर्ती उपयोगकर्ताओं को 100 पृष्ठों में से प्रत्येक - परीक्षण की लंबाई से अधिक) का अनुकरण करता है।

ab -n 1000 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://www.example.com/

-n 1000 बनाने के लिए अनुरोधों की संख्या है।

-c 10 एबी को एक बार में 10 अनुरोधों के बजाय एक बार में 10 अनुरोध करने के लिए कहता है, ताकि समवर्ती आगंतुकों (बनाम अनुक्रमिक आगंतुकों) को बेहतर ढंग से अनुकरण किया जा सके।

-kKeepAliveहेडर भेजता है , जो वेब सर्वर को प्रत्येक अनुरोध के बाद कनेक्शन बंद नहीं करने के लिए कहता है, लेकिन इसके बजाय इसका पुन: उपयोग करना जारी रखें।

मैं अतिरिक्त हेडर भी भेज रहा हूं Accept-Encoding: gzip, deflateक्योंकि mod_deflate का उपयोग लगभग हमेशा टेक्स्ट / html आउटपुट 25% -75% को संपीड़ित करने के लिए किया जाता है - जिसके प्रभाव को खारिज नहीं किया जाना चाहिए क्योंकि यह वेब सर्वर के समग्र प्रदर्शन पर प्रभाव पड़ता है (यानी, 2x डेटा को उसी समय की राशि में स्थानांतरित कर सकते हैं, आदि)।

परिणाम:

Benchmarking www.example.com (be patient)
Completed 100 requests
...
Finished 1000 requests


Server Software:        Apache/2.4.10
Server Hostname:        www.example.com
Server Port:            80

Document Path:          /
Document Length:        428 bytes

Concurrency Level:      10
Time taken for tests:   1.420 seconds
Complete requests:      1000
Failed requests:        0
Keep-Alive requests:    995
Total transferred:      723778 bytes
HTML transferred:       428000 bytes
Requests per second:    704.23 [#/sec] (mean)
Time per request:       14.200 [ms] (mean)
Time per request:       1.420 [ms] (mean, across all concurrent requests)
Transfer rate:          497.76 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       1
Processing:     5   14   7.5     12      77
Waiting:        5   14   7.5     12      77
Total:          5   14   7.5     12      77

Percentage of the requests served within a certain time (ms)
  50%     12
  66%     14
  75%     15
  80%     16
  90%     24
  95%     29
  98%     36
  99%     41
 100%     77 (longest request)

सरलतम व्याख्या के लिए, इस रेखा को ध्यान में रखते हुए सब कुछ अनदेखा करें:

Requests per second:    704.23 [#/sec] (mean)

60 से गुणा करें और आपके पास प्रति मिनट आपके अनुरोध हैं।

वास्तविक विश्व परिणाम प्राप्त करने के लिए, आप कुछ स्थिर HTML या index.php फ़ाइल के बजाय Wordpress का परीक्षण करना चाहेंगे क्योंकि आपको यह जानना होगा कि सब कुछ एक साथ कैसे होता है: जटिल PHP कोड और कई MySQL प्रश्न ...

उदाहरण के लिए यहां एक ही सिस्टम और WAMP पर्यावरण पर Wordpress की एक ताजा स्थापना का परीक्षण करने के परिणाम हैं (मैं WampDeveloper का उपयोग कर रहा हूं, लेकिन Xampp, WampServer, और अन्य भी हैं ...)

Requests per second:    18.68 [#/sec] (mean)

कि अब 37x धीमी है!

लोड परीक्षण के बाद, कई चीजें हैं जो आप समग्र प्रदर्शन (अनुरोध प्रति सेकंड) को बेहतर बनाने के लिए कर सकते हैं, और वेब सर्वर को अधिक लोड के तहत और अधिक स्थिर बना सकते हैं (जैसे, बढ़ते हुए -nऔर -cअपाचे को क्रैश करता है), आप यहाँ पढ़ सकते हैं:

एबी (अपाचे बेंच) के साथ लोड टेस्टिंग अपाचे


9

खिड़कियों पर अपाचे बेंच (एबी) स्थापित करने के लिए कदम (आईएमओ - अनुशंसित)।

चरण 1 - Xampp स्थापित करें।
चरण 2 - सीएमडी खोलें।
चरण 3 - cd C:\xampp\apache\binसीएमडी से अपाचे बेंच गंतव्य पर जाएं )
चरण 4 - कमांड पेस्ट करें ( ab -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://localhost:yourport/)
चरण 5 - इसके लिए प्रतीक्षा करें। आप का काम समाप्त


यह काम नहीं कर रहा है ... मुझे यह त्रुटि मिल रही है: बेंचमार्किंग लोकलहोस्ट (धैर्य रखें) ... apr_socket_recv: कनेक्शन ने इनकार कर दिया (111)
विजयसिंह परमार

127.0.0.1 द्वारा
स्थानीयहोस्ट की

3

मैं भी उत्सुक था कि क्या मैं अपाचे एब्स के साथ अपनी स्क्रिप्ट की गति को माप सकता हूं या एक निर्माण / विनाश php उपाय स्क्रिप्ट या एक पीएचपी विस्तार।

पिछले दो मेरे लिए विफल रहे हैं: वे अनुमानित हैं। जिसके बाद मैंने "अब" और "एब्स" आजमाने की सोची।

कमांड "ab -k -c 350 -n 20000 example.com/" सुंदर है क्योंकि यह सब आसान है!

लेकिन क्या किसी ने उदाहरण के लिए www.apachefriends.org के लिए किसी भी अपाचे सर्वर पर "लोकलहोस्ट" सोचा था?

आपको रूट में "बेंच" जैसे एक फ़ोल्डर बनाना चाहिए जहां आपके पास 2 फाइलें हों: "बेंच.फैप" और संदर्भ "void.php" का परीक्षण करें।

और फिर: इसे बेंचमार्क करें!

bench.php

<?php

for($i=1;$i<50000;$i++){
    print ('qwertyuiopasdfghjklzxcvbnm1234567890');
}
?>

void.php

<?php
?>

अपने डेस्कटॉप पर आपको इस तरह एक .bat फ़ाइल (विंडोज में) का उपयोग करना चाहिए:

bench.bat

"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/void.php
"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/bench.php
pause

अब अगर आप बारीकी से ध्यान दें ...

शून्य स्क्रिप्ट शून्य परिणाम नहीं देता है !!! SO CONCLUSION IS: दूसरे परिणाम से पहला परिणाम कम होना चाहिए !!!

यहाँ मुझे मिला:

c:\xampp\htdocs\bench>"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/void.php
This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        Apache/2.4.33
Server Hostname:        localhost
Server Port:            80

Document Path:          /bench/void.php
Document Length:        0 bytes

Concurrency Level:      1
Time taken for tests:   11.219 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      2150000 bytes
HTML transferred:       0 bytes
Requests per second:    891.34 [#/sec] (mean)
Time per request:       1.122 [ms] (mean)
Time per request:       1.122 [ms] (mean, across all concurrent requests)
Transfer rate:          187.15 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.3      0       1
Processing:     0    1   0.9      1      17
Waiting:        0    1   0.9      1      17
Total:          0    1   0.9      1      17

Percentage of the requests served within a certain time (ms)
  50%      1
  66%      1
  75%      1
  80%      1
  90%      1
  95%      2
  98%      2
  99%      3
 100%     17 (longest request)

c:\xampp\htdocs\bench>"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/bench.php
This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        Apache/2.4.33
Server Hostname:        localhost
Server Port:            80

Document Path:          /bench/bench.php
Document Length:        1799964 bytes

Concurrency Level:      1
Time taken for tests:   177.006 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      18001600000 bytes
HTML transferred:       17999640000 bytes
Requests per second:    56.50 [#/sec] (mean)
Time per request:       17.701 [ms] (mean)
Time per request:       17.701 [ms] (mean, across all concurrent requests)
Transfer rate:          99317.00 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.3      0       1
Processing:    12   17   3.2     17      90
Waiting:        0    1   1.1      1      26
Total:         13   18   3.2     18      90

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

c:\xampp\htdocs\bench>pause
Press any key to continue . . .

90-17 = 73 परिणाम मुझे उम्मीद है!


2

सिर्फ ab का उपयोग करके अपने API का परीक्षण करना पर्याप्त नहीं है। हालाँकि, मुझे लगता है कि यह एक बढ़िया उपकरण है कि आप एक मूल विचार दें कि आपकी साइट कैसी है।

यदि आप कई एपीआई एंडपॉइंट्स का परीक्षण करने के लिए ab कमांड का उपयोग करना चाहते हैं, तो अलग-अलग डेटा के साथ, पृष्ठभूमि में एक ही समय में, आपको "nohup" कमांड का उपयोग करने की आवश्यकता है। जब आप टर्मिनल बंद करते हैं तब भी यह कोई कमांड चलाता है।

मैंने एक सरल स्क्रिप्ट लिखी जो पूरी प्रक्रिया को स्वचालित करती है, इसका उपयोग करने के लिए स्वतंत्र महसूस करें: http://blog.ikvasnica.com/entry/load-test-multiple-api-endpoints-concurrently-use-this-simple-script-script

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.