Apache Bench - Ortam Kurulumu

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 sadece 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ı Süresidir.

  • 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, terminalin kendisi üzerinden ASCII'de çıktı verecek aptal terminali 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.