ab yük testi


194

Birisi apache bench tool ( ab) kullanarak web sitemi nasıl yükleyebilirim sürecinde bana yol gösterebilir mi?

Aşağıdakileri bilmek istiyorum:

Site dakikada kaç kişi işleyebilir?

Lütfen bunu çözmek için koşmam gereken komutları bana yönlendir.

Her öğreticiyi denedim ve kafa karıştırıcılar.

Yanıtlar:


315

Apache kıyaslama aracı çok basittir ve size bazı performans hakkında sağlam bir fikir verirken, sadece sitenizi üretimde ciddi strese maruz bırakmayı planlıyorsanız, buna güvenmek kötü bir fikirdir.

Bunu söyledikten sonra, en yaygın ve en basit parametreler:

-c: ("Eşzamanlılık"). Siteye aynı anda kaç müşterinin (kişi / kullanıcı) vuracağını belirtir. Çalışırken siteye isabet eden müşteriler abolacak -c. Bu, sitenizin karşılaştırmalı değerlendirme sırasında karşılaşacağı stres miktarına gerçekten karar verir.

-n: Kaç istek yapılacağını belirtir. Bu sadece karşılaştırmanın uzunluğuna karar verir. Yüksek -ndeğer-cSunucunuzun destekleyebileceği değer, işlerin sürekli stres altında kırılmamasını sağlamak için iyi bir fikirdir: Stresi 5 saat boyunca 5 saniye boyunca desteklemek aynı değildir.

-k: Bu, "KeepAlive" işlev tarayıcılarının doğası gereği yaptığı bir işlemdir. -k"Boolean" olduğu için bir değer iletmenize gerek yoktur (yani: testinizin Alive Keep Keep üstbilgisini HTTP'den kullanmasını ve bağlantıyı sürdürmesini istediğinizi gösterir). Tarayıcılar bunu yaptığından ve sitenizin tarayıcılardan alacağı stresi ve akışı simüle etmek isteyeceğinizden, bununla bir kıyaslama yapmanız önerilir.

Son argüman sadece ev sahibi. Varsayılan olarak, belirtmezseniz http: // protokolüne basar.

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

Yukarıdaki komutu verdiğinizde, 20 bin istek karşılanana kadar 350 eşzamanlı bağlantı ile http://example.com/ adresine vuracaksınız . Canlı tutma başlığı kullanılarak yapılacaktır.

Süreç 20 bin talebi tamamladıktan sonra, istatistikler hakkında geri bildirim alacaksınız. Bu, yukarıdaki parametreleri kullanırken sitenin stres altında ne kadar iyi performans gösterdiğini size söyleyecektir.

Sitenin aynı anda kaç kişiyi işleyebileceğini bulmak için, yanıt sürelerinin (ortalama, minimum ve maksimum yanıt süreleri, başarısız istekler vb.) Sitenizin kabul edebileceği numaralar olup olmadığını görün (farklı siteler farklı hızlar isteyebilir). "Artırırsam, başarısız istekleri almaya başlar ve sonlanır" dediğiniz noktaya gelene kadar aracı farklı -c değerleriyle çalıştırabilirsiniz.

Web sitenize bağlı olarak, dakikada ortalama istek sayısı beklenir. Bu çok değişir, bunu ab ile simüle edemezsiniz. Bununla birlikte, bu şekilde düşünün: Ortalama kullanıcınız dakikada 5 istekte bulunacaksa ve geçerli bulduğunuz ortalama yanıt süresi 2 saniyedir, yani bir dakikadan 10 saniyenin 1 saniyesinde istekler olacaktır, yani Sitenin çarptığı zamanın 1 / 6'sı. Bu aynı zamanda, ab ile aynı anda siteye isabet eden 6 kullanıcınız varsa, eşzamanlılık seviyeniz (-c) sadece 6 olsa bile, simülasyonda 36 kullanıcınız olması muhtemeldir.

Bu, siteyi kullanan kullanıcılarınızdan beklediğiniz davranışa bağlıdır, ancak sitemden "Kullanıcımın dakika başına X isteğine ulaşmasını bekliyorum ve 2 saniye ise ortalama bir yanıt süresini geçerli görüyorum" adresinden alabilirsiniz. Ardından, ortalama yanıt süresinin 2 saniyesine ulaşana kadar -c seviyenizi değiştirin (ancak maksimum yanıt süresinin ve stddev'in hala geçerli olduğundan emin olun) ve -c'yi ne kadar büyük yapabileceğinizi görün.

Umarım bu açıkladım :) İyi şanslar


5
Düz ve net cevap! Bunu neden aldığınız hakkında biraz daha fazla bilgi verebilir misiniz? Bu aynı zamanda, ab ile aynı anda siteye isabet eden 6 kullanıcınız varsa, eşzamanlılık seviyeniz (-c) yalnızca 6."
kbariotis

3
Yalnızca bir hatırlatma olarak, -lsayfanın dinamik içeriğe sahip olması durumunda seçeneği eklemek istersiniz , bu şekilde içerik uzunluğu istekler arasında farklı olduğu için bir grup başarısız istek almazsınız.
JCM

73

Lütfen bunu çözmek için koşmam gereken komutları bana yönlendir.

Yapabileceğiniz en basit test, her seferinde 10 tane olmak üzere 1000 istek gerçekleştirmektir (bu, test boyunca yaklaşık 10 eşzamanlı kullanıcının her biri 100 sayfa almasını simüle eder).

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

-n 1000 yapılacak isteklerin sayısıdır.

-c 10 AB'ye, eşzamanlı ziyaretçileri (sıralı ziyaretçilere kıyasla) daha iyi simüle etmeleri için bir seferde 1 istek yerine bir seferde 10 istek yapmasını söyler.

-kKeepAliveweb sunucusundan her istek yapıldıktan sonra bağlantıyı kapatmamasını, bunun yerine yeniden kullanmaya devam etmesini isteyen üstbilgiyi gönderir .

Ayrıca Accept-Encoding: gzip, deflatemod_deflate neredeyse her zaman metin / html çıktısını% 25-75% sıkıştırmak için kullanıldığından fazladan başlık gönderiyorum - bunların web sunucusunun genel performansı üzerindeki etkisi nedeniyle (yani, Verileri aynı sürede 2x aktarabilir, vb.).

Sonuçlar:

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)

En basit yorum için, her şeyi göz ardı edin, ancak bu satır:

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

Bunu 60 ile çarpın ve dakikada isteklerinizi alın.

Gerçek dünya sonuçlarını elde etmek için, bazı statik HTML veya index.php dosyası yerine Wordpress'i test etmek isteyeceksiniz, çünkü her şeyin birlikte nasıl performans gösterdiğini bilmeniz gerekir: karmaşık PHP kodu ve birden fazla MySQL sorgusu dahil ...

Örneğin, aynı sistem ve WAMP ortamında yeni bir Wordpress yüklemesi testinin sonuçları (WampDeveloper kullanıyorum, ancak Xampp, WampServer ve diğerleri de var) ...

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

Şimdi 37x daha yavaş!

Yük testinden sonra, genel performansı iyileştirmek için yapabileceğiniz birkaç şey vardır (Saniyedeki İstekler) ve ayrıca web sunucusunu daha büyük yük altında daha kararlı hale getirin (örneğin, Apache'yi çökertme -nve -ceğilimi artırma ) burada okuyabilirsiniz:

AB ile Yük Testi Apache (Apache Bench)


9

Pencerelerde Apache Bench (AB) kurulum adımları (IMO - Önerilir).

Adım 1 - Xampp'i yükleyin.
Adım 2 - CMD'yi açın.
Adım 3 - CMD'den apache bench hedefine ( cd C:\xampp\apache\bin) gidin
Adım 4 - Komutu yapıştırın ( ab -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://localhost:yourport/)
Adım 5 - Bekleyin. Yaptın


Çalışmıyor ... Bu hatayı alıyorum: localhost'u karşılaştırma (sabırlı olun) ... apr_socket_recv: Bağlantı reddedildi (111)
Vijaysinh Parmar

localhost yerine 127.0.0.1
akshaynagpal

3

Ayrıca apache abs veya bir yapı / imha php ölçü komut dosyası veya bir php uzantısı ile benim komut hızını ölçmek merak ediyordum.

son ikisi benim için başarısız oldu: yaklaşık. daha sonra "ab" ve "abs" denemeyi düşündüm.

"ab -k -c 350 -n 20000 example.com/" komutu çok güzel çünkü hepsi daha kolay!

ancak herhangi bir apache sunucusunda "localhost" düşünen var mı, örneğin www.apachefriends.org?

Kökte 2 dosyanızın bulunduğu "bench" gibi bir klasör oluşturmalısınız: "bench.php" test edin ve "void.php" referansını alın.

ve sonra: kıyaslayın!

bench.php

<?php

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

void.php

<?php
?>

Masaüstünüzde aşağıdaki gibi bir .bat dosyası (Windows'ta) kullanmalısınız:

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

Şimdi dikkat ederseniz ...

geçersiz komut dosyası sıfır sonuç üretmez !!! Yani SONUÇ: ikinci sonuçtan ilk sonuç azaltılmalıdır !!!

işte burada:

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 beklediğim sonuç!


2

API'nizi sadece ab kullanarak yük testi yeterli değildir. Ancak, sitenizin nasıl performans gösterdiğine dair temel bir fikir vermek için harika bir araç olduğunu düşünüyorum.

Ab komutunu farklı verilerle birden çok API uç noktasını aynı anda arka planda test etmek için kullanmak istiyorsanız "nohup" komutunu kullanmanız gerekir. Terminali kapatsanız bile herhangi bir komutu çalıştırır.

Tüm süreci otomatikleştiren, kullanmaktan çekinmeyin: http://blog.ikvasnica.com/entry/load-test-multiple-api-endpoints-concurrently-use-this-simple-shell-script

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.