Apache Bench - Hızlı Kılavuz
Performans testi, bir işletmenin başarısı için çok önemli olduğunu kanıtlamıştır. Kötü performans gösteren bir site yalnızca mali kayıplarla karşılaşmaz, aynı zamanda zaman zaman yasal sonuçlara da yol açabilir.
Hiç kimse, satın alma, çevrimiçi test alma, fatura ödemesi vb. Gibi önemli çevrimiçi etkileşimlerde yavaş performans gösteren, güvenilmez bir siteye katlanmak istemez. İnternet bu kadar yaygın olduğu için, alternatifler çok geniş. Müşteri kaybetmek, onları kazanmaktan daha kolaydır ve performans önemli bir oyun değiştiricidir.
Yük Test Aracı İhtiyacı
Bir yük test aracına olan ihtiyacın ne olduğunu anlayabilirsek, onu kullanmak için bize neden ve motivasyon verecektir. Bazı ünlü iş siteleri, çok sayıda ziyaretçi aldıklarında ciddi kesintiler yaşadı. E-ticaret web siteleri, reklam kampanyalarına büyük yatırım yapar, ancak Yük Testi'ne yatırım yapmaz. Bu nedenle, pazarlama trafiği getirdiğinde optimum sistem performansını sağlayamazlar.
Yük testini görmezden gelmenin bir başka bilinen örneği, WordPress web sitelerindeki "bağlantı kurma hatası" dır. Bu nedenle, üretimde dağıtımından önce bir web sitesini veya uygulamayı test etmek iyi bir fikirdir. Yolda daha ayrıntılı testler yapmadan önce bir proje için en iyi durum senaryosunu hızlıca oluşturmak güzel.
Apache Bench nedir?
Apache Bench (ab), bir Köprü Metni Aktarım Protokolü (HTTP) web sunucusunu karşılaştırmak için Apache kuruluşundan bir araçtır. Apache web sunucusunun performansını ölçmek için tasarlanmış olmasına rağmen, aynı derecede iyi olan diğer web sunucularını test etmek için de kullanılabilir. Bu araçla, web sunucunuzun saniyede kaç istek sunabileceğini hızlı bir şekilde öğrenebilirsiniz.
Apache Bench'in Özellikleri
Apache Bench'in önemli özelliklerini ve sınırlamalarını görelim. Özellikler ve sınırlamalar aşağıda listelenmiştir -
Açık kaynak kodlu bir yazılım olduğu için ücretsiz olarak temin edilebilir.
Basit bir komut satırı bilgisayar programıdır.
Platformdan bağımsız bir araçtır. Bu, Linux / Unix veya Windows sunucusunda eşit derecede iyi çağrılabileceği anlamına gelir.
Yalnızca web sunucusu - HTTP veya HTTPS için yük ve performans testi yapabilir.
Genişletilebilir değildir.
Apache Bench, eşzamanlılık düzeyinden bağımsız olarak (-c bayrağıyla belirtilir) yalnızca bir işletim sistemi iş parçacığı kullanır. Bu nedenle, yüksek kapasiteli sunucuları karşılaştırırken, tek bir Apache Bench örneği kendi başına bir darboğaz oluşturabilir. Hedef URL'yi tamamen doyurmak için, sunucunuzda birden çok işlemci çekirdeği varsa, ek Apache Bench örneklerini paralel olarak kullanmak daha iyidir.
Önlem
Apache Bench'te testleri çalıştırırken belirli aralıklarla eşzamanlılığı artırmaya yönelik bir yönerge olmadığını bilmeniz gerekir. Bu nedenle, ab kullanarak yük testleri çalıştırmak, hizmet reddi (DOS) saldırısına eşdeğerdir. Uzun bir süre ağır yük testi yapacaksanız, VPS servis sağlayıcınızı bilgilendirmeniz ve ondan önceden izin almanız önerilir. Yük testi görevi için size uygun bir zaman aralığı tahsis edecek veya düğümünüzü değiştireceklerdir.
İkinci olarak, üçüncü bir kişinin web sitesini sürekli olarak ve yalnızca VPS'nizden (test düğümü haline gelen) Apache Bench'i öğrenmek için uzun süre test ediyorsanız, VPS genel IP'nizin üçüncü kişinin web sitesi tarafından engellenmesi uzak bir olasılık vardır kalıcı olarak. Bu durumda, o web sitesine aynı IP ile bağlanamazsınız. Ancak gelecekte gerçekten web sitesine bağlanmak istiyorsanız, tek çözüm hedef web sitesinin sistem yöneticisi ile konuşmak veya VPS servis sağlayıcınızın yardımıyla farklı bir IP ile sunucunun yeni bir örneğini oluşturmak olacaktır.
Sizi uyardıktan sonra, bu eğitimdeki tüm testlerin yeterince güvenli olduğunu ve sistem yöneticilerinin genellikle "sistemi kötüye kullanma" olarak adlandırdıkları uygulamalar dışında sizi temin ederim.
Bu bölümde, VPS'nizde Apache Bench için ortamınızı nasıl kuracağınız konusunda size rehberlik edeceğiz.
Sistem gereksinimleri
Memory - 128 MB
Disk Space - Minimum gereklilik yok
Operating System - Minimum gereklilik yok
Apache Bench'i Kurmak
Apache Bench, bağımsız bir uygulamadır ve Apache web sunucusu kurulumuna bağımlılığı yoktur. Aşağıda, Apache Bench'i kurmak için iki aşamalı bir süreç yer almaktadır.
Step 1 - Paket veritabanını güncelleyin.
# apt-get update
Bir terminal komutundan önceki # sembolünün, kök kullanıcının bu komutu verdiği anlamına geldiğini lütfen unutmayın.
Step 2 - Apache Bench'e erişmek için apache2 utils paketini kurun.
# apt-get install apache2-utils
Apache Bench artık kurulmuştur. Aynı VPS'de barındırılan bir web uygulamasını test etmek istiyorsanız, sadece Apache web sunucusunu kurmanız yeterlidir -
# apt-get install apache2
Bir Apache aracı olan Apache Bench, Apache web sunucusunun kurulumunda otomatik olarak kurulur.
Apache Bench Kurulumunu Doğrulama
Şimdi Apache Bench Kurulumunu nasıl doğrulayacağımızı görelim. Aşağıdaki kod, kurulumun doğrulanmasına yardımcı olacaktır -
# ab -V
Output
This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Yukarıdaki terminal çıktısını gördüğünüzde, Apache Bench'i başarıyla kurduğunuz anlamına gelir.
Ayrıcalıklı bir Sudo Kullanıcısı Oluşturma
Güvenlik açısından, sistem yöneticisinin kök olarak çalışmak yerine bir sudo kullanıcısı oluşturması iyi bir uygulama olarak kabul edilir. Bu amaçla test adında bir test kullanıcısı oluşturacağız -
# useradd -m -d /home/test -g sudo test
Yeni kullanıcı için şifre belirleyelim -
# passwd test
Sistem, kullanıcı testi için yeni bir şifre isteyecektir. Biz sadece test ettiğimiz ve üretim sunucusuna dağıtmayacağımız için basit bir şifre girebilirsiniz. Genellikle sudo komutu, sudo kullanıcı şifresini girmenizi ister; İşlem zahmetli hale geldiği için karmaşık parolaların kullanılmaması önerilir.
Output
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Apache.org Web Sitesini Test Etme
Bu bölümde Apache.org Web sitesini test edeceğiz. Önce sudo kullanıcı testine geçelim -
# su test
Başlangıç olarak, Apache organizasyonunun web sitesini test edeceğiz, https://www.apache.org/. Önce komutu çalıştırıp sonra çıktıyı anlayacağız -
$ ab -n 100 -c 10 https://www.apache.org/
Buraya -nkarşılaştırma oturumu için gerçekleştirilecek isteklerin sayısıdır. Varsayılan, genellikle temsili olmayan kıyaslama sonuçlarına götüren tek bir talepte bulunmaktır.
Ve -ceşzamanlılıktır ve bir seferde gerçekleştirilecek birden çok isteğin sayısını belirtir. Varsayılan, bir seferde bir istektir.
Yani bu testte Apache Bench, Apache organizasyon sunucusuna eşzamanlılık 10 ile 100 istek yapacak.
Output
This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking www.apache.org (be patient).....done
Server Software: Apache/2.4.7
Server Hostname: www.apache.org
Server Port: 443
SSL/TLS Protocol: TLSv1.2,ECDHE-RSA-AES256-GCM-SHA384,2048,256
Document Path: /
Document Length: 58769 bytes
Concurrency Level: 10
Time taken for tests: 1.004 seconds
Complete requests: 100
Failed requests: 0
Total transferred: 5911100 bytes
HTML transferred: 5876900 bytes
Requests per second: 99.56 [#/sec] (mean)
Time per request: 100.444 [ms] (mean)
Time per request: 10.044 [ms] (mean, across all concurrent requests)
Transfer rate: 5747.06 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 39 46 30.9 41 263
Processing: 37 40 21.7 38 255
Waiting: 12 15 21.7 13 230
Total: 77 86 37.5 79 301
Percentage of the requests served within a certain time (ms)
50% 79
66% 79
75% 80
80% 80
90% 82
95% 84
98% 296
99% 301
100% 301 (longest request)
İlk testimizi çalıştırdıktan sonra, aşağıdaki gibi bu komutun kullanım modelini tanımak kolay olacaktır -
# ab [options .....] URL
nerede,
ab - Apache Bench komutu
options - gerçekleştirmek istediğimiz belirli görev için bayraklar
URL - test etmek istediğimiz yol url'si
Çıktı Değerlerini Anlamak
Ab tarafından döndürülen çeşitli çıktı değerlerini anlamak için farklı ölçütleri anlamamız gerekir. İşte liste -
Server Software - İlk başarılı dönüşün HTTP başlığında döndürülen web sunucusunun adıdır.
Server Hostname - Komut satırında verilen DNS veya IP adresidir.
Server Port- ab'nin bağlandığı bağlantı noktasıdır. Komut satırında bağlantı noktası belirtilmemişse, bu varsayılan olarak http için 80 ve https için 443 olacaktır.
SSL/TLS Protocol- Bu, istemci ve sunucu arasında görüşülen protokol parametresidir. Bu yalnızca SSL kullanılıyorsa yazdırılacaktır.
Document Path - Bu, komut satırı dizesinden ayrıştırılan istek URI'sıdır.
Document Length- Başarıyla döndürülen ilk belgenin bayt cinsinden boyutudur. Belge uzunluğu test sırasında değişirse, yanıt bir hata olarak kabul edilir.
Concurrency Level - Bu, test sırasında kullanılan eşzamanlı istemci sayısıdır (web tarayıcılarına eşdeğer).
Time Taken for Tests - Bu, ilk soket bağlantısının oluşturulduğu andan son yanıtın alındığı ana kadar geçen süredir.
Complete Requests - Alınan başarılı yanıtların sayısı.
Failed Requests- Başarısız olarak değerlendirilen isteklerin sayısı. Sayı sıfırdan büyükse, bağlanma, okuma, yanlış içerik uzunluğu veya istisnalar nedeniyle başarısız olan isteklerin sayısını gösteren başka bir satır yazdırılacaktır.
Total Transferred- Sunucudan alınan toplam bayt sayısı. Bu sayı, esasen kablo üzerinden gönderilen bayt sayısıdır.
HTML Transferred- Sunucudan alınan toplam belge baytı sayısı. Bu sayı, HTTP başlıklarında alınan baytları içermez
Requests per second- Bu, saniyedeki istek sayısıdır. Bu değer, istek sayısının geçen toplam süreye bölünmesinin sonucudur.
Time per request- İstek başına harcanan ortalama süre. İlk değer eşzamanlılık * zamanlama * 1000 / tamamlanma formülüyle hesaplanırken, ikinci değer zaman çizelgesi * 1000 / tamamlandı formülüyle hesaplanır
Transfer rate - Toplam okunan / 1024 / zaman formülü ile hesaplanan aktarım hızı.
Yük Testi Çıktısının Hızlı Analizi
Ab komutundan çıktı değerlerinin başlıklarını öğrendikten sonra, ilk testimiz için çıktı değerlerini analiz etmeye ve anlamaya çalışalım -
Apache kuruluşu kendi web Sunucusu Yazılımını kullanıyor - Apache (sürüm 2.4.7)
Sunucu, https nedeniyle 443 Bağlantı Noktasını dinliyor. Http olsaydı, 80 (varsayılan) olurdu.
Aktarılan toplam veri 100 istek için 58769 bayttır.
Test 1.004 saniyede tamamlandı. Başarısız istek yok.
Saniye başına istek - 99,56. Bu oldukça iyi bir sayı olarak kabul edilir.
İstek başına süre - 100,444 ms (10 eşzamanlı istek için). Yani tüm isteklerde 100.444 ms / 10 = 10.044 ms'dir.
Aktarım hızı - 1338,39 [Kbyte / sn] alındı.
Bağlantı süresi istatistiklerinde, birçok isteğin birkaç saniye beklemesi gerektiğini gözlemleyebilirsiniz. Bunun nedeni apache web sunucusunun istekleri bekleme kuyruğuna alması olabilir.
İlk testimizde, farklı bir sunucuda barındırılan bir uygulamayı (yani www.apache.org) test ettik. Eğitimin sonraki bölümünde, ab testlerini çalıştıracağımız aynı sunucuda barındırılan örnek web uygulamalarımızı test edeceğiz. Bu, öğrenme kolaylığı ve gösteri amaçlıdır. İdeal olarak, doğru ölçüm için ana bilgisayar düğümü ve test düğümü farklı olmalıdır.
Ab'yi daha iyi öğrenmek için, bu eğiticide ilerlerken, farklı durumlar için çıktı değerlerinin nasıl değiştiğini karşılaştırmalı ve gözlemlemelisiniz.
Apache Bench'in Çıktısını Çizmek
Burada, istek sayısı arttıkça sunucunun ne kadar zaman aldığını görmek için ilgili sonucu çizeceğiz. Bunun için ekleyeceğiz-g önceki komuttaki seçenek ve ardından ab çıktı verilerinin kaydedileceği dosya adı (burada dışarı. veriler) -
$ ab -n 100 -c 10 -g out.data https://www.apache.org/
Şimdi görelim out.data bir arsa oluşturmadan önce -
$ less out.data
Output
starttime seconds ctime dtime ttime wait
Tue May 30 12:11:37 2017 1496160697 40 38 77 13
Tue May 30 12:11:37 2017 1496160697 42 38 79 13
Tue May 30 12:11:37 2017 1496160697 41 38 80 13
...
Şimdi, sütun başlıklarını anlayalım. out.data dosya -
starttime - Bu, aramanın başladığı tarih ve saattir.
seconds - Başlangıç zamanıyla aynı, ancak Unix zaman damgası biçiminde (tarih -d @ 1496160697, başlangıç zamanı çıktısını döndürür).
ctime - Bu Bağlantı Zamanı.
dtime - Bu İşlem Süresi.
ttime - Bu, Toplam Süre'dir (matematiksel olarak ttime = ctime + dtime, ctime ve dtime toplamıdır).
wait - Bu Bekleme Süresi.
Bu birden çok öğenin birbiriyle nasıl ilişkili olduğuna dair resimli bir görselleştirme için aşağıdaki resme bir göz atın -
Terminal üzerinden çalışıyorsak veya grafiklerin olmadığı yerlerde, gnuplotharika bir seçenektir. Aşağıdaki adımlardan geçerek hızlı bir şekilde anlayacağız.
Gnuplot'u kuralım ve başlatalım -
$ sudo apt-get install gnuplot
$ gnuplot
Output
G N U P L O T
Version 4.6 patchlevel 6 last modified September 2014
Build System: Linux x86_64
Copyright (C) 1986-1993, 1998, 2004, 2007-2014
Thomas Williams, Colin Kelley and many others
gnuplot home: http://www.gnuplot.info
faq, bugs, etc: type "help FAQ"
immediate help: type "help" (plot window: hit 'h')
Terminal type set to 'qt'
gnuplot>
Terminal üzerinden çalıştığımız ve grafiklerin mevcut olmadığını varsaydığımız için, ASCII'de çıktı verecek aptal terminali terminalin kendisi üzerinden seçebiliriz. Bu, bu hızlı araçla planımızın neye benzediğine dair bir fikir edinmemize yardımcı olur. Şimdi terminali ASCII grafiği için hazırlayalım.
gnuplot> set terminal dumb
Output
Terminal type set to 'dumb'
Options are 'feed size 79, 24'
Gnuplot terminalimiz artık ASCII grafiği için hazır olduğundan, out.data dosya -
gnuplot> plot "out.data" using 9 w l
Output
1400 ++-----+------+-----+------+------+------+------+-----+------+-----++
+ + + + + + +"out.data" using 9 ****** +
| |
1200 ++ ********************************************
| ******************* |
1000 ++ * ++
| * |
| * |
800 ++ * ++
| * |
| * |
600 ++ * ++
| * |
| * |
400 ++ * ++
| * |
200 ++ * ++
| * |
+**** + + + + + + + + + +
0 ++-----+------+-----+------+------+------+------+-----+------+-----++
0 10 20 30 40 50 60 70 80 90 100
Talep sayısına göre 9. sütundan toplam süreyi (ms cinsinden) ttime olarak belirledik. Biz ilk on istekleri için, toplam süre (10 sonraki 30 istekler için, yaklaşık 100 ms olduğunu fark edebilirsiniz th 40 th , bu 1100 ms yükselmiştir ve benzeri). Arsa, şuna bağlı olarak farklı olmalıout.data.
Önceki bölümde, bir üçüncü taraf web sitesini test etmek için Apache Bench'in temel kullanımını anladık. Bu bölümde, bir web uygulamasını kendi sunucumuzda test etmek için bu aracı kullanacağız. Öğreticiyi mümkün olduğu kadar bağımsız tutmak için, gösteri amaçlı bir python uygulaması kurmayı seçtik; uzmanlık seviyenize bağlı olarak PHP veya Ruby gibi başka bir dil seçebilirsiniz.
Python'u Yükleme
Python, genellikle Linux sunucularında varsayılan olarak kurulur.
Bottle Framework Kurmak ve Basit Bir Uygulama Oluşturmak
Bottle, web uygulamaları oluşturmak için python ile yazılmış bir mikro çerçevedir ve pip bir python paket yöneticisidir. Bottle'ı kurmak için terminale aşağıdaki komutu yazın -
$ sudo apt-get install python-pip
$ sudo pip install bottle
Şimdi küçük bir Şişe uygulaması oluşturalım. Bunun için bir dizin oluşturun ve içine gidin -
$ mkdir webapp
$ cd webapp
Yeni bir python betiği oluşturacağız, app.py, webapp dizininin içinde -
$ vim app.py
Şimdi, app.py dosyasına aşağıdaki kodu yazın -
from bottle import Bottle, run
app = Bottle()
@app.route('/')
@app.route('/hello')
def hello():
return "Hello World!"
run(app, host = 'localhost', port = 8080)
Yukarıdaki satırları eklediğinizde dosyayı kaydedin ve kapatın. Dosyayı kaydettikten sonra, uygulamayı başlatmak için python betiğini çalıştırabiliriz -
$ python app.py
Output
Bottle v0.12.7 server starting up (using WSGIRefServer())...
Listening on http://localhost:8080/
Hit Ctrl-C to quit.
Bu çıktı, uygulamamızın ana bilgisayardaki yerel makinede çalıştığını gösterir. http://localhost ve limanda dinlemek 8080.
Uygulamamızın HTTP isteklerine doğru şekilde yanıt verip vermediğini kontrol edelim. Bu terminal Şişe uygulamasından çıkmadan herhangi bir giriş alamadığından, başka bir terminal ile VPS'imize giriş yapmamız gerekiyor. VPS'de başka bir terminal ile oturum açtıktan sonra, yeni terminalde aşağıdaki kodu yazarak uygulamanıza gidebilirsiniz.
$ lynx http://localhost:8080/
Lynx bir komut satırı tarayıcısıdır ve genellikle Debian ve Ubuntu gibi çeşitli Linux dağıtımlarında varsayılan olarak yüklenir. Aşağıdaki çıktıyı görüyorsanız bu, uygulamanızın iyi çalıştığı anlamına gelir.
Output
Yukarıdaki çıktıyı görürseniz, bu, uygulamamızın canlı ve teste hazır olduğu anlamına gelir.
Uygulamayı Geliştirme Web Sunucusuyla Test Etme
Lütfen ab'de bir hata olduğunu ve uygulamayı localhost'ta test edemeyeceğini unutmayın. Bu nedenle, app.py dosyasındaki ana bilgisayarı localhost'tan 127.0.0.1'e değiştireceğiz. Böylece dosya şu şekilde değişecek -
from bottle import Bottle, run
app = Bottle()
@app.route('/')
@app.route('/hello')
def hello():
return "Hello World!"
run(app, host = '127.0.0.1', port = 8080)
Şimdi uygulamamızı, lynx komutunun çalıştırıldığı terminalde aşağıdaki komutu yazarak test edelim -
$ ab -n 100 -c 10 http://127.0.0.1:8080/hello
Output
This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient).....done
Server Software: WSGIServer/0.1
Server Hostname: 127.0.0.1
Server Port: 8080
Document Path: /hello
Document Length: 12 bytes
Concurrency Level: 10
Time taken for tests: 0.203 seconds
Complete requests: 100
Failed requests: 0
Total transferred: 16500 bytes
HTML transferred: 1200 bytes
Requests per second: 493.78 [#/sec] (mean)
Time per request: 20.252 [ms] (mean)
Time per request: 2.025 [ms] (mean, across all concurrent requests)
Transfer rate: 79.56 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 0
Processing: 1 6 28.2 2 202
Waiting: 1 6 28.2 2 202
Total: 1 6 28.2 2 202
Percentage of the requests served within a certain time (ms)
50% 2
66% 2
75% 2
80% 2
90% 2
95% 2
98% 202
99% 202
100% 202 (longest request)
İlk terminaldeki çıktı aşağıdaki gibi (100 kez) olacaktır -
...
127.0.0.1 - - [10/Jun/2017 04:30:26] "GET /hello HTTP/1.0" 200 12
127.0.0.1 - - [10/Jun/2017 04:30:26] "GET /hello HTTP/1.0" 200 12
127.0.0.1 - - [10/Jun/2017 04:30:26] "GET /hello HTTP/1.0" 200 12
...
İlk teste kıyasla ab sonucunun çeşitli değerlerinin nasıl değiştiğini gözlemleyebilirsiniz.
Uygulamayı Çok Parçacıklı Web Sunucusuyla Test Etme
Önceki ab testlerinde, Bottle çerçevesinde paketlenmiş varsayılan web sunucusunu kullandık.
Şimdi tek iş parçacıklı varsayılan web sunucusunu çok iş parçacıklı bir sunucu ile değiştireceğiz. Bu nedenle, çok iş parçacıklı bir web sunucusu kitaplığı kuralım.cherrypy veya gunicornve Bottle'a onu kullanmasını söyle. Burada gösteri amacıyla silahlı mısır seçtik (başka birini de seçebilirsiniz) -
$ sudo apt-get install gunicorn
Ve dosyayı değiştir, yani varsayılan web sunucusundan gunicorn'a değiştir -
...
run(server = 'gunicorn'...)
...
Uygulamayı ikinci terminalde test edelim.
$ ab -n 100 -c 10 http://127.0.0.1:8080/hello
Output
This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient).....done
Server Software: gunicorn/19.0.0
Server Hostname: 127.0.0.1
Server Port: 8080
Document Path: /hello
Document Length: 12 bytes
Concurrency Level: 10
Time taken for tests: 0.031 seconds
Complete requests: 100
Failed requests: 0
Total transferred: 17200 bytes
HTML transferred: 1200 bytes
Requests per second: 3252.77 [#/sec] (mean)
Time per request: 3.074 [ms] (mean)
Time per request: 0.307 [ms] (mean, across all concurrent requests)
Transfer rate: 546.36 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 0.9 0 4
Processing: 1 2 0.7 3 4
Waiting: 0 2 0.8 2 3
Total: 2 3 0.6 3 5
WARNING: The median and mean for the initial connection time are not within a normal
deviation These results are probably not that reliable.
WARNING: The median and mean for the processing time are not within a normal deviation
These results are probably not that reliable.
Percentage of the requests served within a certain time (ms)
50% 3
66% 3
75% 3
80% 3
90% 4
95% 5
98% 5
99% 5
100% 5 (longest request)
Saniyedeki İsteklerin 493'ten 3252'ye nasıl yükseldiğini gözlemleyin. Bu, gunicorn'un python uygulamaları için bir üretim sunucusu olarak uygun olduğu anlamına gelir.
Bu bölümde, birden çok URL'yi aynı anda nasıl test edeceğimizi öğreneceğiz. Bunun için uygulama dosyamız olan app.py'yi iki URL içerecek şekilde düzenlememiz gerekecek -
from bottle import Bottle, run
app = Bottle()
@app.route('/')
@app.route('/hello1')
def hello():
return "Hello World! It is first URL."
@app.route('/hello2')
def hello():
return "Hello World! It is second URL."
run(app,server = 'gunicorn',host = '127.0.0.1', port = 8080)
Basit Bir Kabuk Komut Dosyası Oluşturma
Bunu, birden çok ab çağrısı içeren bir kabuk betiği oluşturarak yapabilirsiniz. Bir test.sh dosyası oluşturun ve buna aşağıdaki satırları ekleyin -
ab -n 100 -c 10 http://127.0.0.1:8080/hello1
ab -n 100 -c 10 http://127.0.0.1:8080/hello2
Yukarıdaki satırları eklediğinizde, dosyayı kaydedin ve kapatın. Dosyayı çalıştırılabilir yapın -
chmod u+x test.sh
Şimdi betiği çalıştıralım -
./test.sh
Tekrardan ve netlik amacından kaçınmak için, aşağıda gösterildiği gibi, hangi kısmın çıkarıldığını noktalarla göstererek ab çıktısının yalnızca ilgili kısmını göstereceğiz.
Çıktı
.
.
.
Document Path: /hello1
Document Length: 732 bytes
Concurrency Level: 10
Time taken for tests: 0.040 seconds
Complete requests: 100
Failed requests: 0
Non-2xx responses: 100
Total transferred: 90000 bytes
HTML transferred: 73200 bytes
Requests per second: 2496.13 [#/sec] (mean)
Time per request: 4.006 [ms] (mean)
Time per request: 0.401 [ms] (mean, across all concurrent requests)
Transfer rate: 2193.87 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.8 0 3
Processing: 1 3 1.0 4 5
Waiting: 0 3 1.2 4 4
Total: 1 4 0.6 4 5
WARNING: The median and mean for the processing time are not within a normal deviation
These results are probably not that reliable.
.
.
.
Apache Bench Çıktısını Dosyaya Kaydetmek İçin Kabuk Betiği
Birden çok ab çağrısıyla bir kabuk betiği oluşturarak Apache Bench Çıktısını dosyaya kaydedebilirsiniz. Her satırın sonuna bir&;bu, komutun arka planda çalışmasını sağlar ve sonraki komutun yürütülmesini başlatır. Ayrıca çıktıyı her url için <dosyaadı> kullanarak bir dosyaya yeniden yönlendirmek isteyeceksiniz. Örneğin, test.sh dosyamız değişiklikten sonra aşağıdaki gibi görünecektir -
$ ab -n 100 -c 10 http://127.0.0.1:8080/hello1 > test1.txt &
$ ab -n 100 -c 10 http://127.0.0.1:8080/hello2 > test2.txt &
Buraya, test1.txt ve test2.txt çıktı verilerini kaydedecek dosyalardır.
Yukarıdaki komut dosyasının ilgili URL'ler için ab çıktısını içeren iki dosya, test1.txt ve test2.txt oluşturduğunu kontrol edebilirsiniz -
$ ls -l
Çıktı
...
-rw-r--r-- 1 root root 5225 May 30 12:11 out.data
-rwxr--r-- 1 root root 118 Jun 10 12:24 test.sh
-rw-r--r-- 1 root root 1291 Jun 10 12:31 test1.txt
-rwxr--r-- 1 root root 91 Jun 10 13:22 test2.sh
-rw-r--r-- 1 root root 1291 Jun 10 12:31 test2.txt
...
Dikkatli Durum
Ab kullanırken, başarısız olan teste karşı uyarıda bulunmadan uyanık olmalısınız. Örneğin, yanlış bir URL'yi kontrol ederseniz, aşağıdakine benzer bir şey alabilirsiniz (burada bağlantı noktasını kasıtlı olarak değiştirdik).
$ ab -l -r -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://127.0.0.1:805/
Çıktı
This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient).....done
Server Software:
Server Hostname: 127.0.0.1
Server Port: 805
Document Path: /
Document Length: Variable
Concurrency Level: 10
Time taken for tests: 0.002 seconds
Complete requests: 100
Failed requests: 150
(Connect: 0, Receive: 100, Length: 0, Exceptions: 50)
Keep-Alive requests: 0
Total transferred: 0 bytes
HTML transferred: 0 bytes
Requests per second: 44984.26 [#/sec] (mean)
Time per request: 0.222 [ms] (mean)
Time per request: 0.022 [ms] (mean, across all concurrent requests)
Transfer rate: 0.00 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 0 0 0.2 0 0
Waiting: 0 0 0.0 0 0
Total: 0 0 0.2 0 0
Percentage of the requests served within a certain time (ms)
50% 0
66% 0
75% 0
80% 0
90% 0
95% 0
98% 0
99% 0
100% 0 (longest request)
Bu bölümde, dinamik sayfaları test etmek için gereken hazırlığı anlayacağız. Sunucu tarafı dinamik web sayfası, yapısı sunucu tarafı komut dosyalarını işleyen bir uygulama sunucusu tarafından kontrol edilen bir web sayfasıdır. Apache tezgahı, yalnızca sunucu tarafı dinamik web sayfasını test edebilir.
Eş Zamanlılık Düzeyi ve Toplam İstek Sayısı
Eşzamanlılık düzeyi, toplam istek sayısından düşük olmalıdır.
$ ab -l -r -n 30 -c 80 -k -H "Accept-Encoding: gzip, deflate" http://127.0.0.1:8000/
Output
ab: Cannot use concurrency level greater than total number of requests
Usage: ab [options] [http[s]://]hostname[:port]/path
Bayrakların Kullanımı
Bu bölümde, bazı önemli bayrakların ab komutu ile kullanımını anlatacağız. Terimleri, seçenekleri ve bayrakları birbirinin yerine kullanacağız.
Ayrıntılı-v
Ayrıntılı seçeneği, birden fazla başarısız istek varsa analiz etmek ve hata ayıklamak için kullanılabilir. Yük testinin yaygın bir başarısızlığı göstergesi, testin çok hızlı bitmesi ve saniye başına istek için iyi bir sayı vermesidir. Ancak bu yanlış bir ölçüt olacaktır. Başarıyı veya başarısızlığı belirlemek için,-v 2Her yanıtın gövdesini ve başlığını terminal çıkışına aktaracak seçenek. Aşağıdaki komut bir kullanım durumunu gösterir -
$ ab -n 1 -v 2 http://www.generic-example-URL.com/
Output
LOG: header received:
HTTP/1.0 200 OK
…
Content-Length: 2548687
Elbette, değişken yanıtları test ediyorsanız veya herhangi bir hata durumunda 200 olmayan HTTP kodları döndürüyorsanız, uzunluk kontrolünü göz ardı etmeniz yeterlidir. -lseçeneği. Sonraki bölümlerde bir web2py uygulamasını başlatacağımız zaman yakında 200 olmayan HTTP göreceğiz.
Yaşamak-k
İstemci HTTP isteği gönderdiğinde, sunucuya bağlantı kurulur, sunucu yanıtı gönderir ve isteği gönderdikten sonra bağlantı kapatılır. Bu döngü her istekle devam eder. Bununla birlikte, canlı tutma ayarıyla (kalıcı bağlantılar olarak da bilinir), istemci birden çok isteği ve yanıtı kolaylaştırmak için temel bir TCP bağlantısını açık tutar; bu, aksi takdirde mevcut olabilecek yavaş ve maliyetli bağlantı başlatma süresini ortadan kaldırır.
Değişken belge uzunluğu -l
Web sayfası değişken uzunlukta ise, şu seçeneği kullanmalısınız: -l. Apache Bench, yanıtların uzunluğu sabit değilse hataları bildirmez. Bu, dinamik sayfalar için yararlı olabilir.
-R seçeneğinin kullanımı
Hata alırken ab çıkmamaya nasıl zorlanır? Seçeneği kullanmalısınız-r. Bu seçenek olmadan, herhangi bir istek soket hatasına ulaşır ulaşmaz testiniz başarısız olabilir. Ancak bu seçenek ile hatalar başarısız hatalar başlığında rapor edilecek ancak test sonuna kadar devam edecektir.
-H seçeneğinin kullanımı
Bu seçenek, rastgele başlık satırı eklemek için kullanılır. Bağımsız değişken tipik olarak iki nokta üst üste ile ayrılmış alan-değer çifti içeren geçerli bir başlık satırı biçimindedir (yani, "Accept-Encoding: zip / zop; 8bit").
-C seçeneğinin kullanımı
Aşağıdaki bölümde, yukarıdaki seçeneklerin çerez değerini kullanma seçeneği ile birlikte nasıl kullanılacağını ayrıntılı olarak öğreneceğiz, yani -Cseçeneği. -C seçeneği tipik olarak birname = valueçift. Bu alan tekrar edilebilir.
Apache Bench ile Oturum Çerezi Kullanma
Tanımlama bilgisinin Apache Bench ile nasıl kullanılacağını anlamak için tanımlama bilgisi ayarlamaya çalışan bir web sayfasına ihtiyacımız var. Çok iyi bir örnek, bir python web çerçevesi olan web2py uygulamasıdır.
Web2py yükleniyor
Hızlı bir şekilde başka bir python uygulaması web2py kuracağız. Nasıl kullanılacağı hakkında daha fazla bilgiyi Web2py Çerçevesine Genel Bakış bölümünde okuyabilirsiniz .
Python genellikle varsayılan olarak Ubuntu ve Debian sunucusuna kurulur. Bu nedenle, web2py'yi başarıyla çalıştırmak için bir gereksinim zaten karşılanmıştır.
Ancak, indireceğimiz zip dosyasından web2py'nin kaynak dosyalarını çıkarmak için unzip paketini yüklememiz gerekiyor -
$ sudo apt-get update
$ sudo apt-get install unzip
Web2py çerçevesini projenin web sitesinden alalım. Bunu ana klasörümüze indireceğiz -
$cd ~
$ wget http://www.web2py.com/examples/static/web2py_src.zip
Şimdi indirdiğimiz dosyayı açıp içine taşıyabiliriz -
$ unzip web2py_src.zip
$ cd web2py
Web2py'yi çalıştırmak için yüklemenize gerek yoktur. Web2py dizinine girdikten sonra, aşağıdaki komutu yazarak çalıştırabilirsiniz -
$python web2py.py
Her şey başarılı olursa, yönetici kullanıcı arayüzü için bir şifre seçmenizin isteneceği aşağıdaki çıktıyı göreceksiniz -
web2py Web Framework
Created by Massimo Di Pierro, Copyright 2007-2017
Version 2.14.6-stable+timestamp.2016.05.10.00.21.47
Database drivers available: sqlite3, imaplib, pymysql, pg8000
WARNING:web2py:GUI not available because Tk library is not installed
choose a password:
please visit:
http://127.0.0.1:8000/
use "kill -SIGTERM 23904" to shutdown the web2py server
Ancak, başlatılan web arayüzüne yalnızca yerel makineden erişilebildiğinin farkında olmanız gerekir.
Çıktıdan, web sunucusunu durdurmak için anlık terminale “CTRL-C” yazmanız gerekeceğini anlayabilirsiniz. Öte yandan, aynı VPS ile ilgili diğer terminaldeki web2py sunucusunu durdurmak için kill -SIGTERM <PID> komutunu ekleyebilirsiniz; burada <PID> web2py sunucusu için işlem kimliğidir, bu durumda 23904.
Web2py'den Oturum Çerezi
Bir sayfaya yalnızca oturum açmış bir kullanıcı erişebiliyorsa, oturum açma sayfasından doğrudan erişilemiyorsa, bu durumda -Cbayrak. Bu bayrak, ab komutu için bir çerez tanımlar. Ancak oturum tanımlayıcı tanımlama bilgisinin değerini geçerli bir oturumdan almanız gerekir. Nasıl elde edilir? Çeşitli çevrimiçi eğitimler sizi Chrome (veya Mozilla) tarayıcı geliştirici araçlarına yönlendirecektir. Ancak bizim test durumumuzda, uygulama sadece komut satırında mevcut olduğundan, değeri elde etmek için lynx tarayıcısını kullanacağız.
Önce bir oturumun çerez değerini alalım. Başka bir terminal açın ve aşağıdaki komutu yazın -
$ lynx http://127.0.0.1:8000/
Yukarıdaki komuta yanıt olarak, lynx, aşağıdaki resimde gösterildiği gibi web2py sunucusundan çerezi kabul etmek için izninizi isteyecektir.
Yazmadan önce çerez değerini not edin yçerezi kabul etmek için. Şimdi terminal aşağıdaki resme benzer görünecek - terminaldeki web sitesi!
Çerez değerini elde ettikten sonra, şimdi ab testini çalıştıracağız. Bunun için üçüncü terminali açmamız gerekecek (aşağıdaki resme bakın) -
Şimdi üçüncü terminalde -C bayrağını kullanalım -
$ ab -n 100 -c 10 -C session_name = 127.0.0.1-643dad04-3c34 http://127.0.0.1:8000/
Çıktı
This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient).....done
Server Software: Rocket
Server Hostname: 127.0.0.1
Server Port: 8000
Document Path: /
Document Length: 66 bytes
Concurrency Level: 10
Time taken for tests: 0.051 seconds
Complete requests: 100
Failed requests: 0
Non-2xx responses: 100
Total transferred: 27700 bytes
HTML transferred: 6600 bytes
Requests per second: 1968.12 [#/sec] (mean)
Time per request: 5.081 [ms] (mean)
Time per request: 0.508 [ms] (mean, across all concurrent requests)
Transfer rate: 532.39 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 2 0.9 2 4
Processing: 0 3 0.9 3 5
Waiting: 0 2 1.1 2 4
Total: 4 5 0.7 5 7
Percentage of the requests served within a certain time (ms)
50% 5
66% 5
75% 5
80% 6
90% 6
95% 6
98% 7
99% 7
100% 7 (longest request)
Yukarıdaki çıktıdan birkaç noktaya dikkat çekiyoruz. İlk olarak, web2py Rocket web sunucusunu kullanır . Ayrıca, çıktıda daha önce tartışılan başlıklara ek olarak '2xx olmayan yanıtlar' aldığımızı da not ediyoruz. Genel olarak, Http protokolü bir isteğe bir yanıt kodu kullanarak yanıt verir ve 200s aralığında herhangi bir şey 'tamam' anlamına gelir ve geri kalanı bir soruna karşılık gelir. Örneğin, 400'ler, 404 Dosya Bulunamadı gibi kaynakla ilgili hatalardır. 500'ler sunucu hatalarına karşılık gelir. Anlık durumumuzda, -C seçeneğini kullandığımız durumlar dışında hiçbir yerde hata yoktur. Daha önce açıklandığı gibi -l seçeneği kullanılarak bastırılabilir.
Yönetici Sayfasını Kontrol Etme
Bu bölümde, yönetici sayfasını nasıl kontrol edeceğimizi anlayacağız. Karşılaştırma amacıyla, web2py uygulamasının başka bir URL'sini test edelim -
$ ab -n 100 -c 10 session_name = 127.0.0.1-643dad04-3c34 http://127.0.0.1:8000/admin
Çıktı
This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient).....done
Server Software: Rocket
Server Hostname: 127.0.0.1
Server Port: 8000
Document Path: /admin
Document Length: 8840 bytes
Concurrency Level: 10
Time taken for tests: 2.077 seconds
Complete requests: 100
Failed requests: 0
Total transferred: 926700 bytes
HTML transferred: 884000 bytes
Requests per second: 48.14 [#/sec] (mean)
Time per request: 207.749 [ms] (mean)
Time per request: 20.775 [ms] (mean, across all concurrent requests)
Transfer rate: 435.61 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 3.2 0 12
Processing: 62 204 52.2 199 400
Waiting: 61 203 52.0 199 400
Total: 62 205 54.3 199 411
Percentage of the requests served within a certain time (ms)
50% 199
66% 211
75% 220
80% 226
90% 264
95% 349
98% 381
99% 411
100% 411 (longest request)
İlgili istatistikleri özellikle "Bağlantı Süreleri" ve "Sunulan taleplerin yüzdesi ..." bölümlerine not etmelisiniz. http://127.0.0.1:8000/ ve http://127.0.0.1:8000/admin. Çok büyük bir fark var.
Zaman Sınırı Seçeneğini Kullanma
Genellikle, Timelimit seçeneği aldatıcı bir seçenektir. Bunu oldukça açıklayıcı olan ab el kitabından anlayalım -
-t timelimit
Maximum number of seconds to spend for benchmarking. This implies a -n 50000 internally.
Use this to benchmark the server within a fixed total amount of time.
Per default there is no timelimit.
Bu seçenekle bir test yapalım. Çıktıdan geçtikten sonra gözlemlerimizi not edeceğiz -
$ ab -n 100 -c 10 -t 60 http://127.0.0.1:8000/
Çıktı
This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient)
Completed 5000 requests
Completed 10000 requests
Completed 15000 requests
Completed 20000 requests
Completed 25000 requests
Completed 30000 requests
Completed 35000 requests
Completed 40000 requests
Completed 45000 requests
Completed 50000 requests
Finished 50000 requests
Server Software: Rocket
Server Hostname: 127.0.0.1
Server Port: 8000
Document Path: /
Document Length: 66 bytes
Concurrency Level: 10
Time taken for tests: 22.547 seconds
Complete requests: 50000
Failed requests: 0
Non-2xx responses: 50000
Total transferred: 13850000 bytes
HTML transferred: 3300000 bytes
Requests per second: 2217.61 [#/sec] (mean)
Time per request: 4.509 [ms] (mean)
Time per request: 0.451 [ms] (mean, across all concurrent requests)
Transfer rate: 599.88 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 2 0.8 2 8
Processing: 0 2 3.2 2 218
Waiting: 0 2 3.2 2 218
Total: 2 4 3.1 4 220
Percentage of the requests served within a certain time (ms)
50% 4
66% 4
75% 4
80% 5
90% 5
95% 5
98% 7
99% 8
100% 220 (longest request)
Çıktının, bu seçeneğin, tarafından belirtilen istek sayısını geçersiz kıldığını gösterdiğine dikkat edin. -nseçenek ve 50K isteklere kadar devam eder. Bununla birlikte, talepler çok hızlı bir şekilde ele alındığı için, ab 50k işaretine ulaşılır ulaşılmaz sonlandırıldı - anlık vakada 22 saniye (Testler için alınan süre başlığına bakın).
Aynı komutu değiştirerek test edebilirsiniz. http://127.0.0.1:8000/ ile http://127.0.0.1:8000/admin (bizim web2py uygulamamız olduğunu varsayarak) veya https://www.apache.org/ gibi bir üçüncü taraf web sitesi, istatistikler arasındaki farkı fark edin.
Yük Testini Yapmadan Önce Kontrol Listesi
Testi başarıyla çalıştırmanıza ve performansı doğru şekilde ölçmenize yardımcı olacak birkaç kontrol vardır. Yük testini gerçekleştirmeden önce aşağıdaki koşulları göz önünde bulundurun -
Fazladan python modülünün yüklenmediğinden emin olun.
TCP / IP Bağlantı Noktası Tükenmesini önlemek için, başka bir ab testine geçmeden önce genellikle 2-3 dakika beklemelisiniz.
Eşzamanlı bağlantıların sayısının Apache Worker Threads'ten daha düşük olduğundan emin olun.
Apache veya python çökerse, başka bir test yapmadan önce sunucuyu yeniden başlatmalısınız.
Bu bölümde, çeşitli kombinasyonlarını açıklayacağız. -n ve -c Web sunucunuzdaki yükü kademeli olarak artırmak için önemli bayraklarla.
Yükü artırdıkça esas olarak aşağıdaki metriklerin nasıl değiştiğine odaklanmalısınız -
- Saniyedeki istek sayısı
- Bağlantı Süreleri (ms)
- Belirli bir süre içinde sunulan taleplerin yüzdesi (ms)
Sunucu takılmaya başladığında ve başarısız istekler almaya başladığınızda eşik değerini de fark etmelisiniz.
100 Sayfa Tıklaması Yapan 1 Eşzamanlı Kullanıcı
Tek bir kullanıcıyla 100 ardışık sayfa yüklemesi yapalım -
$ ab -l -r -n 100 -c 1 -k -H "Accept-Encoding: gzip, deflate" http://127.0.0.1:8000/
Çıktı
This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient).....done
Server Software: Rocket
Server Hostname: 127.0.0.1
Server Port: 8000
Document Path: /
Document Length: Variable
Concurrency Level: 1
Time taken for tests: 0.045 seconds
Complete requests: 100
Failed requests: 0
Non-2xx responses: 100
Keep-Alive requests: 0
Total transferred: 27700 bytes
HTML transferred: 6600 bytes
Requests per second: 2206.24 [#/sec] (mean)
Time per request: 0.453 [ms] (mean)
Time per request: 0.453 [ms] (mean, across all concurrent requests)
Transfer rate: 596.80 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 0 0 0.0 0 0
Waiting: 0 0 0.0 0 0
Total: 0 0 0.0 0 1
Percentage of the requests served within a certain time (ms)
50% 0
66% 0
75% 0
80% 0
90% 1
95% 1
98% 1
99% 1
100% 1 (longest request)
Her biri 10 Sayfa Tıklayan 5 Eşzamanlı Kullanıcı
Bu durum, bir web sitesinde ayda yaklaşık 50.000'den fazla tıklama alan en yüksek yüke karşılık gelir.
$ ab -l -r -n 10 -c 5 -k -H "Accept-Encoding: gzip, deflate" http://127.0.0.1:8000/
Aşağıdaki sonraki çıktılarda, açıklık amacıyla ortak başlığı çıkaracağız.
Çıktı
...
Requests per second: 2009.24 [#/sec] (mean)
Time per request: 2.488 [ms] (mean)
Time per request: 0.498 [ms] (mean, across all concurrent requests)
Transfer rate: 543.52 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 0.5 1 2
Processing: 0 1 0.5 1 2
Waiting: 0 1 0.5 1 1
Total: 2 2 0.4 3 3
ERROR: The median and mean for the total time are more than twice the standard
deviation apart. These results are NOT reliable.
Percentage of the requests served within a certain time (ms)
50% 3
66% 3
75% 3
80% 3
90% 3
95% 3
98% 3
99% 3
100% 3 (longest request)
Her biri 10 Sayfa Tıklayan 10 Eşzamanlı Kullanıcı
Bu test, 10 farklı eşzamanlı kullanıcı tarafından 100 sayfa yüklemesine karşılık gelir, her kullanıcı 10 ardışık sayfa yüklemesi yapar.
$ ab -r -n 10 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://127.0.0.1:8000/
Çıktı
...
Requests per second: 2225.68 [#/sec] (mean)
Time per request: 4.493 [ms] (mean)
Time per request: 0.449 [ms] (mean, across all concurrent requests)
Transfer rate: 602.07 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 2 0.7 2 3
Processing: 0 2 1.0 2 3
Waiting: 0 1 1.0 2 3
Total: 4 4 0.3 4 4
WARNING: The median and mean for the waiting time are not within a normal deviation
These results are probably not that reliable.
Percentage of the requests served within a certain time (ms)
50% 4
66% 4
75% 4
80% 4
90% 4
95% 4
98% 4
99% 4
100% 4 (longest request)
Her biri 20 Sayfa Tıklaması Yapan 20 Eşzamanlı Kullanıcı
Bu test 20 farklı eşzamanlı kullanıcı tarafından 400 sayfa yüklemesine karşılık gelir, her kullanıcı 20 ardışık sayfa yüklemesi yapar.
$ ab -r -n 20 -c 20 -k -H “Accept-Encoding: gzip, deflate” http://127.0.0.1:8000/
Çıktı
...
Requests per second: 1619.96 [#/sec] (mean)
Time per request: 12.346 [ms] (mean)
Time per request: 0.617 [ms] (mean, across all concurrent requests)
Transfer rate: 438.21 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 2 6 2.3 6 10
Processing: 1 5 2.9 5 10
Waiting: 0 5 2.9 5 9
Total: 10 11 0.6 11 12
Percentage of the requests served within a certain time (ms)
50% 11
66% 11
75% 12
80% 12
90% 12
95% 12
98% 12
99% 12
100% 12 (longest request)
Her biri 30 Sayfa Tıklaması Yapan 30 Eşzamanlı Kullanıcı
Bu test, 30 farklı eşzamanlı kullanıcının 900 sayfa yüklemesine karşılık gelir, her kullanıcı 30 ardışık sayfa yüklemesi yapmaktadır.
$ ab -r -n 30 -c 30 -k -H "Accept-Encoding: gzip, deflate" http://127.0.0.1:8000/
Çıktı
...
Requests per second: 2283.45 [#/sec] (mean)
Time per request: 13.138 [ms] (mean)
Time per request: 0.438 [ms] (mean, across all concurrent requests)
Transfer rate: 617.69 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 2 6 2.7 6 11
Processing: 1 6 3.1 6 11
Waiting: 0 5 3.2 5 10
Total: 11 12 0.5 12 13
Percentage of the requests served within a certain time (ms)
50% 12
66% 12
75% 12
80% 12
90% 13
95% 13
98% 13
99% 13
100% 13 (longest request)
Artık web sitesinde yükü kademeli olarak nasıl artıracağımızı ve performansını nasıl test edeceğimizi öğrendik.
Bu bölümde, bayraklı ve bayraksız çıktıları karşılaştıracağız. Uygun bayrakların kullanımının web uygulamanızın performansını nasıl artırabileceğini görelim. Bundan önce, başvurunuzun basit olması durumunda farkı fark etmeyebileceğinizi anlamamız gerekir. Basit uygulamamızda olduğu gibi, bayraklı ve bayraksız. Sonra aynı testi yapacağızhttps://www.apache.org/ URL ve farkı görün.
Uygulamamızı Bayraksız Test Etmek
Bu bölümde, uygulamamızı bayraklar olmadan nasıl test edeceğimizi anlayacağız.
$ ab -n 100 -c 10 http://127.0.0.1:8000/
Çıktı
This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient).....done
Server Software: Rocket
Server Hostname: 127.0.0.1
Server Port: 8000
Document Path: /
Document Length: Variable
Concurrency Level: 10
Time taken for tests: 0.244 seconds
Complete requests: 100
Failed requests: 0
Non-2xx responses: 100
Keep-Alive requests: 0
Total transferred: 27700 bytes
HTML transferred: 6600 bytes
Requests per second: 2208.77 [#/sec] (mean)
Time per request: 4.527 [ms] (mean)
Time per request: 0.453 [ms] (mean, across all concurrent requests)
Transfer rate: 597.49 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 2 0.7 2 3
Processing: 0 2 0.7 2 4
Waiting: 0 2 1.0 2 3
Total: 4 4 0.3 4 5
Percentage of the requests served within a certain time (ms)
50% 4
66% 4
75% 5
80% 5
90% 5
95% 5
98% 5
99% 5
100% 5 (longest request)
Uygulamamızı Bayraklarla Test Etmek
Bu bölümde, uygulamamızı bayraklarla nasıl test edeceğimizi anlayacağız.
$ ab -l -r -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://127.0.0.1:8000/
Çıktı
...
Requests per second: 2277.07 [#/sec] (mean)
Time per request: 4.392 [ms] (mean)
Time per request: 0.439 [ms] (mean, across all concurrent requests)
Transfer rate: 615.97 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 2 0.7 2 3
Processing: 0 2 0.7 2 4
Waiting: 0 2 1.0 2 3
Total: 4 4 0.2 4 5
Percentage of the requests served within a certain time (ms)
50% 4
66% 4
75% 4
80% 4
90% 5
95% 5
98% 5
99% 5
100% 5 (longest request)
Çıktı istatistikleri arasında çok fazla fark olmadığını basitçe not edebiliriz.
Apache Kuruluş Web Sitesini İşaretsiz Test Etme
Şimdi Apache Organizasyon Web sitesini işaretler olmadan nasıl test edeceğimize bakalım.
$ ab -n 100 -c 10 http://www.apache.org/
Çıktı
This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking www.apache.org (be patient).....done
Server Software: Apache/2.4.7
Server Hostname: www.apache.org
Server Port: 80
Document Path: /
Document Length: 58433 bytes
Concurrency Level: 10
Time taken for tests: 1.498 seconds
Complete requests: 100
Failed requests: 0
Total transferred: 5877500 bytes
HTML transferred: 5843300 bytes
Requests per second: 66.74 [#/sec] (mean)
Time per request: 149.840 [ms] (mean)
Time per request: 14.984 [ms] (mean, across all concurrent requests)
Transfer rate: 3830.58 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 12 110 295.2 12 1012
Processing: 37 38 0.5 38 39
Waiting: 12 13 0.3 13 15
Total: 49 147 295.4 50 1051
Percentage of the requests served within a certain time (ms)
50% 50
66% 50
75% 50
80% 50
90% 816
95% 1050
98% 1051
99% 1051
100% 1051 (longest request)
Apache Kuruluş Web Sitesini Bayraklarla Test Etme
Şimdi Apache Organizasyon Web Sitesini Flags ile test edelim.
$ ab -l -r -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://www.apache.org/
Çıktı
...
Document Length: Variable
Concurrency Level: 10
Time taken for tests: 0.357 seconds
Complete requests: 100
Failed requests: 0
Keep-Alive requests: 100
Total transferred: 1358510 bytes
HTML transferred: 1317700 bytes
Requests per second: 280.28 [#/sec] (mean)
Time per request: 35.678 [ms] (mean)
Time per request: 3.568 [ms] (mean, across all concurrent requests)
Transfer rate: 3718.41 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 3.7 0 12
Processing: 14 17 21.3 15 227
Waiting: 14 17 21.3 14 227
Total: 14 18 21.5 15 227
Percentage of the requests served within a certain time (ms)
50% 15
66% 15
75% 15
80% 15
90% 27
95% 28
98% 29
99% 227
100% 227 (longest request)
Bayraklar kullanımıyla saniye başına talebin nasıl arttığını kolayca not edebilirsiniz. Mevcut durumda, özellikle kullanımından kaynaklanmaktadır-H "Accept-Encoding: gzip, deflate çünkü bu bayrak Apache sunucusuna isteklere gzipped biçim.
Apache Bench Sonuçlarının Değerlendirilmesi
Apache Bench sonuçları söz konusu olduğunda birkaç önemli noktanın dikkate alınması gerekir. Bu, uygulamamızdaki darboğazları gidermek ve performansını artırmak için genel stratejimizi tasarlamamıza yardımcı olacaktır.
Saniyedeki Taleplere ihtiyacımız var. Bu bize web sunucusu kurulumumuzun ne kadar iyi çalıştığına dair bir fikir verir; sayı ne kadar büyükse performans o kadar iyi olur. Ardından Bağlantı Süreleri (ms) ve sunulan isteklerin Yüzdesi gelir. Bu ölçümleri istediğiniz performansa göre değiştirmek için web sunucunuzun ayarlarını değiştirmeniz gerekebilir.
Apache'nin veya kullanılan web sunucusu hata günlüklerinde veya (genel) günlüklerinde hata olup olmadığını kontrol edin. Yükünüzü artıracağınız için işler boğulmaya başlayacak: bellek sorunları ortaya çıkmaya başlayacak. Bir çok python komut dosyası, eşzamanlılık düşünülerek yazılmadıysa çökmeye başlayacaktır.
Web sunucunuzun çöktüğü ve / veya zaman aşımına uğrayan kritik eşzamanlılık değerinin ne olduğunu bulmanız mı gerekiyor? Normalde bu, oldukça yüksek bir eşzamanlılık düzeyinde gerçekleşmelidir. Bu değer düşükse bir şeyler yanlıştır ve bu ayarları daha düşük / daha yüksek yapmanız gerekir.
Sonuç
Bu eğitimde Apache Bench'in herhangi bir web sitesini veya web uygulamasını yüklemek için nasıl kullanılabileceğini öğrendik. Apache Bench, web uygulama sunucusu kurulumunuzun nasıl iyileştirilmesi gerektiğini belirlemek, darboğazları azaltmak ve performansı artırmak için çok değerli bir araç olabilir. Artık Apache Bench'in temel kullanımına aşina olduğunuza göre, çeşitli senaryolarda uygulamalarınızın performansını ölçmek için yeni test planları oluşturarak başlayabilirsiniz.