Apache Bench - Panduan Cepat

Pengujian kinerja telah membuktikan dirinya sangat penting untuk kesuksesan bisnis. Situs yang berkinerja buruk tidak hanya menghadapi kerugian finansial, tetapi juga kadang-kadang dapat menimbulkan dampak hukum.

Tidak seorang pun ingin bertahan dengan situs yang berkinerja lambat dan tidak dapat diandalkan dalam interaksi online yang penting seperti pembelian, pengambilan tes online, pembayaran tagihan, dll. Dengan Internet yang tersedia secara luas, berbagai alternatif sangat besar. Lebih mudah kehilangan klien daripada mendapatkannya dan kinerja adalah pengubah permainan utama.

Kebutuhan Alat Pengujian Beban

Jika kita dapat memahami apa kebutuhan alat pengujian beban, itu akan memberi kita alasan dan motivasi untuk menggunakannya. Beberapa situs bisnis terkenal mengalami downtime yang serius ketika mendapatkan banyak pengunjung. Situs web e-niaga banyak berinvestasi dalam kampanye iklan, tetapi tidak dalam Pengujian Beban. Oleh karena itu, mereka gagal untuk memastikan kinerja sistem yang optimal, ketika pemasaran tersebut menghasilkan lalu lintas.

Contoh umum lainnya dari mengabaikan pengujian beban adalah "kesalahan membangun koneksi" di situs WordPress. Oleh karena itu, ada baiknya untuk melakukan uji beban situs web atau aplikasi sebelum penerapannya dalam produksi. Sangat menyenangkan untuk segera membuat skenario kasus terbaik untuk suatu proyek sebelum menjalankan tes yang lebih rinci di jalan.

Apa itu Apache Bench?

Apache Bench (ab) adalah alat dari organisasi Apache untuk membuat tolok ukur server web Hypertext Transfer Protocol (HTTP). Meskipun dirancang untuk mengukur kinerja server web Apache, namun ia juga dapat digunakan untuk menguji server web lain yang sama baiknya. Dengan alat ini, Anda dapat dengan cepat mengetahui berapa banyak permintaan per detik yang mampu dilayani oleh server web Anda.

Fitur Apache Bench

Mari kita lihat fitur dan batasan penting dari Apache Bench. Fitur dan batasan tercantum di bawah -

  • Menjadi perangkat lunak sumber terbuka, itu tersedia secara gratis.

  • Ini adalah program komputer baris perintah sederhana.

  • Ini adalah alat yang tidak bergantung platform. Ini berarti dapat dijalankan di Linux / Unix atau di server Windows sama baiknya.

  • Itu dapat melakukan uji beban dan kinerja hanya untuk server web - HTTP atau HTTPS.

  • Itu tidak bisa diperpanjang.

Apache Bench hanya menggunakan satu utas sistem operasi terlepas dari level konkurensi (ditentukan oleh tanda -c). Oleh karena itu, saat melakukan benchmarking pada server berkapasitas tinggi, satu instance Apache Bench sendiri dapat menjadi hambatan. Untuk benar-benar memenuhi URL target, lebih baik menggunakan instance tambahan Apache Bench secara paralel, jika server Anda memiliki beberapa inti prosesor.

Pencegahan

Anda perlu menyadari bahwa tidak ada perintah di Apache Bench untuk meningkatkan konkurensi dalam interval tertentu saat menjalankan pengujian. Oleh karena itu, menjalankan uji beban menggunakan ab sama dengan serangan penolakan layanan (DOS). Direkomendasikan agar Anda menginformasikan dan meminta izin sebelumnya dari penyedia layanan VPS Anda jika Anda akan melakukan pengujian beban berat untuk jangka waktu yang lama. Mereka akan memberi Anda interval waktu yang sesuai atau menggeser node Anda untuk tugas pengujian beban.

Kedua, jika Anda menguji situs web orang ketiga secara terus menerus dan dalam waktu yang lama hanya untuk mempelajari Apache Bench dari VPS Anda (yang menjadi node pengujian), ada kemungkinan kecil bahwa IP publik VPS Anda dapat diblokir oleh situs web orang ketiga tersebut. secara permanen. Jika demikian, Anda tidak akan dapat terhubung ke situs web tersebut dengan IP yang sama. Tetapi jika Anda benar-benar ingin terhubung ke situs web di masa mendatang, satu-satunya solusi adalah berbicara dengan administrator sistem situs web target, atau membuat server baru dengan IP yang berbeda dengan bantuan penyedia layanan VPS Anda.

Setelah memperingatkan Anda, izinkan saya meyakinkan Anda bahwa semua pengujian dalam tutorial ini cukup aman dan dari apa yang biasanya disebut praktik "penyalahgunaan sistem" oleh administrator sistem.

Di bab ini, kami akan memandu Anda cara mengatur lingkungan Anda untuk Apache Bench di VPS Anda.

Persyaratan Sistem

  • Memory - 128 MB

  • Disk Space - Tidak ada persyaratan minimum

  • Operating System - Tidak ada persyaratan minimum

Menginstal Apache Bench

Apache Bench adalah aplikasi yang berdiri sendiri, dan tidak memiliki ketergantungan pada penginstalan server web Apache. Berikut ini adalah proses dua langkah untuk menginstal Apache Bench.

Step 1 - Perbarui database paket.

# apt-get update

Harap dicatat bahwa simbol # sebelum perintah terminal berarti bahwa pengguna root mengeluarkan perintah itu.

Step 2 - Instal paket apache2 utils untuk mendapatkan akses ke Apache Bench.

# apt-get install apache2-utils

Apache Bench sekarang sudah terpasang. Jika Anda ingin menguji aplikasi web yang dihosting di VPS yang sama, maka cukup menginstal server web Apache saja -

# apt-get install apache2

Menjadi utilitas Apache, Apache Bench secara otomatis diinstal pada penginstalan server web Apache.

Memverifikasi Instalasi Apache Bench

Sekarang mari kita lihat cara memverifikasi Instalasi Apache Bench. Kode berikut akan membantu memverifikasi instalasi -

# 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/

Jika Anda melihat output terminal di atas, artinya Anda telah berhasil menginstal Apache Bench.

Membuat Pengguna Sudo yang Diistimewakan

Dari sudut pandang keamanan, dianggap sebagai praktik yang baik bagi administrator sistem untuk membuat pengguna sudo alih-alih berfungsi sebagai root. Kami akan membuat pengguna tes, bernama tes, untuk tujuan -

# useradd -m -d /home/test -g sudo test

Mari kita atur kata sandi untuk pengguna baru -

# passwd test

Sistem akan meminta kata sandi baru untuk pengujian pengguna. Anda dapat memasukkan kata sandi sederhana karena kami hanya menguji, dan tidak menerapkan ke server produksi. Biasanya perintah sudo akan meminta Anda untuk memberikan kata sandi pengguna sudo; disarankan untuk tidak menggunakan kata sandi yang rumit karena prosesnya menjadi tidak praktis.

Output

Enter new UNIX password:
Retype new UNIX password:   
passwd: password updated successfully

Menguji Situs Web Apache.org

Di bagian ini, kami akan menguji Situs Apache.org. Mari kita beralih ke uji pengguna sudo -

# su test

Untuk memulainya, kami akan menguji situs web organisasi Apache, https://www.apache.org/. Kami pertama-tama akan menjalankan perintah, dan kemudian memahami hasilnya -

$ ab -n 100 -c 10 https://www.apache.org/

Sini -nadalah jumlah permintaan yang harus dilakukan untuk sesi pembandingan. Defaultnya adalah hanya melakukan satu permintaan yang biasanya mengarah ke hasil benchmarking non-representatif.

Dan -cadalah konkurensi dan menunjukkan jumlah beberapa permintaan yang harus dilakukan dalam satu waktu. Default adalah satu permintaan dalam satu waktu.

Jadi dalam pengujian ini, Apache Bench akan membuat 100 permintaan dengan konkurensi 10 ke server organisasi Apache.

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)

Setelah menjalankan tes pertama kami, akan mudah untuk mengenali pola penggunaan perintah ini yaitu sebagai berikut -

# ab [options .....]  URL

dimana,

  • ab - Perintah Apache Bench

  • options - bendera untuk tugas tertentu yang ingin kami lakukan

  • URL - jalur url yang ingin kami uji

Memahami Nilai Output

Kita perlu memahami metrik yang berbeda untuk memahami berbagai nilai keluaran yang dikembalikan oleh ab. Ini dia daftarnya -

  • Server Software - Ini adalah nama server web yang dikembalikan di header HTTP dari pengembalian pertama yang berhasil.

  • Server Hostname - Ini adalah alamat DNS atau IP yang diberikan pada baris perintah.

  • Server Port- Ini adalah port tempat ab terhubung. Jika tidak ada port yang diberikan pada baris perintah, ini akan default ke 80 untuk http dan 443 untuk https.

  • SSL/TLS Protocol- Ini adalah parameter protokol yang dinegosiasikan antara klien dan server. Ini hanya akan dicetak jika SSL digunakan.

  • Document Path - Ini adalah URI permintaan yang diurai dari string baris perintah.

  • Document Length- Ini adalah ukuran dalam byte dari dokumen pertama yang berhasil dikembalikan. Jika panjang dokumen berubah selama pengujian, respon dianggap error.

  • Concurrency Level - Ini adalah jumlah klien bersamaan (setara dengan browser web) yang digunakan selama pengujian.

  • Time Taken for Tests - Ini adalah waktu yang diambil dari saat koneksi soket pertama dibuat hingga saat respons terakhir diterima.

  • Complete Requests - Jumlah tanggapan sukses yang diterima.

  • Failed Requests- Jumlah permintaan yang dianggap gagal. Jika angkanya lebih besar dari nol, baris lain akan dicetak menunjukkan jumlah permintaan yang gagal karena menghubungkan, membaca, panjang isi yang salah, atau pengecualian.

  • Total Transferred- Jumlah total byte yang diterima dari server. Jumlah ini pada dasarnya adalah jumlah byte yang dikirim melalui kabel.

  • HTML Transferred- Jumlah total byte dokumen yang diterima dari server. Jumlah ini tidak termasuk byte yang diterima di header HTTP

  • Requests per second- Ini adalah jumlah permintaan per detik. Nilai ini adalah hasil pembagian jumlah permintaan dengan total waktu yang dibutuhkan.

  • Time per request- Waktu rata-rata yang dihabiskan per permintaan. Nilai pertama dihitung dengan rumus konkurensi * timetaken * 1000 / selesai sedangkan nilai kedua dihitung dengan rumus timetaken * 1000 / selesai

  • Transfer rate - Tingkat transfer dihitung dengan rumus totalread / 1024 / waktu yang diambil.

Analisis Cepat dari Output Pengujian Beban

Setelah mempelajari tentang judul nilai keluaran dari perintah ab, mari kita coba menganalisis dan memahami nilai keluaran untuk pengujian awal kita -

  • Organisasi Apache menggunakan Perangkat Lunak Server web mereka sendiri - Apache (versi 2.4.7)

  • Server mendengarkan di Port 443 karena https. Seandainya http, itu akan menjadi 80 (default).

  • Total data yang ditransfer adalah 58769 byte untuk 100 permintaan.

  • Tes selesai dalam 1,004 detik. Tidak ada permintaan yang gagal.

  • Permintaan per detik - 99,56. Ini dianggap angka yang cukup bagus.

  • Waktu per permintaan - 100,444 md (untuk 10 permintaan bersamaan). Jadi untuk semua permintaan, ini adalah 100.444 ms / 10 = 10.044 ms.

  • Kecepatan transfer - 1338,39 [Kbytes / detik] diterima.

  • Dalam statistik waktu koneksi, Anda dapat mengamati bahwa banyak permintaan harus menunggu beberapa detik. Ini mungkin karena server web apache menempatkan permintaan dalam antrian tunggu.

Dalam pengujian pertama kami, kami telah menguji aplikasi (yaitu, www.apache.org) yang dihosting di server yang berbeda. Di bagian selanjutnya dari tutorial ini, kami akan menguji aplikasi web sampel kami yang dihosting di server yang sama tempat kami akan menjalankan tes ab. Ini untuk kemudahan pembelajaran dan tujuan demonstrasi. Idealnya, node host dan node pengujian harus berbeda untuk pengukuran yang akurat.

Untuk mempelajari ab dengan lebih baik, Anda harus membandingkan dan mengamati bagaimana nilai keluaran bervariasi untuk berbagai kasus saat kita melanjutkan tutorial ini.

Merencanakan Output dari Apache Bench

Di sini kita akan memplot hasil yang relevan untuk melihat berapa banyak waktu yang dibutuhkan server karena jumlah permintaan meningkat. Untuk itu, kami akan menambahkan file-g opsi di perintah sebelumnya diikuti dengan nama file (di sini out.data) di mana data keluaran ab akan disimpan -

$ ab -n 100 -c 10 -g out.data https://www.apache.org/

Sekarang mari kita lihat out.data sebelum kita membuat plot -

$ 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
...

Mari kita sekarang memahami tajuk kolom di out.data file -

  • starttime - Ini adalah tanggal dan waktu dimulainya panggilan.

  • seconds - Sama seperti waktu mulai tetapi dalam format stempel waktu Unix (tanggal -d @ 1496160697 mengembalikan keluaran waktu mulai).

  • ctime - Ini adalah Waktu Koneksi.

  • dtime - Ini adalah Waktu Proses.

  • ttime - Ini adalah Total Waktu (itu adalah jumlah dari ctime dan dtime, secara matematis ttime = ctime + dtime).

  • wait - Ini adalah Waktu Menunggu.

Untuk visualisasi bergambar tentang bagaimana beberapa item ini terkait satu sama lain, lihat gambar berikut -

Jika kami bekerja melalui terminal atau di mana grafik tidak tersedia, gnuplotadalah pilihan yang bagus. Kami akan segera memahaminya dengan melalui langkah-langkah berikut.

Biarkan kami menginstal dan meluncurkan gnuplot -

$ 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>

Saat kita mengerjakan terminal dan menganggap bahwa grafik tidak tersedia, kita dapat memilih terminal bodoh yang akan memberikan keluaran dalam ASCII melalui terminal itu sendiri. Ini membantu kami mendapatkan gambaran seperti apa plot kami dengan alat cepat ini. Sekarang mari kita siapkan terminal untuk plot ASCII.

gnuplot> set terminal dumb

Output

Terminal type set to 'dumb'
Options are 'feed  size 79, 24'

Karena, terminal gnuplot kami sekarang siap untuk plot ASCII, mari kita plot data dari out.data file -

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

Kami telah memplot waktu t, total waktu (dalam md) dari kolom 9, sehubungan dengan jumlah permintaan. Kita dapat melihat bahwa untuk permintaan sepuluh awal, total waktu itu di hampir 100 ms, selama 30 permintaan berikutnya (dari 10 th sampai 40 th ), meningkat menjadi 1.100 ms, dan sebagainya. Plot Anda harus berbeda tergantung pada Andaout.data.

Di bab sebelumnya, kami memahami penggunaan dasar Apache Bench untuk menguji situs web pihak ketiga. Di bagian ini, kami akan menggunakan alat ini untuk menguji aplikasi web di server kami sendiri. Agar tutorial tetap mandiri sejauh mungkin, kami telah memilih untuk menginstal aplikasi python untuk tujuan demonstrasi; Anda dapat memilih bahasa lain seperti PHP atau Ruby tergantung pada tingkat keahlian Anda.

Menginstal Python

Umumnya, Python diinstal secara default di server Linux.

Memasang Kerangka Botol dan Membuat Aplikasi Sederhana

Bottle adalah kerangka mikro yang ditulis dengan python untuk membuat aplikasi web, dan pip adalah pengelola paket python. Ketik perintah berikut di terminal untuk menginstal Bottle -

$ sudo apt-get install python-pip
$ sudo pip install bottle

Sekarang mari kita buat aplikasi Botol kecil. Untuk itu, buat direktori dan pindahkan di dalamnya -

$ mkdir webapp
$ cd webapp

Kami akan membuat skrip python baru, app.py, di dalam direktori webapp -

$ vim app.py

Sekarang, tulis kode berikut di file app.py -

from bottle import Bottle, run

app = Bottle()

@app.route('/')
@app.route('/hello')
def hello():
   return "Hello World!"

run(app, host = 'localhost', port = 8080)

Setelah Anda menambahkan baris di atas, simpan dan tutup file. Setelah menyimpan file, kita dapat menjalankan skrip python untuk meluncurkan aplikasi -

$ python app.py

Output

Bottle v0.12.7 server starting up (using WSGIRefServer())...
Listening on http://localhost:8080/
Hit Ctrl-C to quit.

Output ini menunjukkan bahwa aplikasi kita berjalan di mesin lokal di host http://localhost dan mendengarkan di pelabuhan 8080.

Mari kita periksa apakah aplikasi kita merespons dengan benar permintaan HTTP. Karena terminal ini tidak dapat menerima masukan apa pun tanpa berhenti melayani aplikasi Botol, kita perlu masuk ke VPS dengan terminal lain. Setelah masuk ke VPS dengan terminal lain, Anda dapat menavigasi ke aplikasi Anda dengan mengetikkan kode berikut di terminal baru.

$ lynx http://localhost:8080/

Lynx adalah browser baris perintah dan biasanya diinstal secara default di berbagai distribusi Linux seperti Debian dan Ubuntu. Jika Anda melihat output berikut, artinya aplikasi Anda berfungsi dengan baik.

Output

Jika Anda melihat keluaran di atas, itu berarti aplikasi kita hidup dan siap untuk diuji.

Menguji Aplikasi dengan Developmental Web Server

Harap dicatat bahwa ada bug di ab, dan itu tidak dapat menguji aplikasi di localhost. Jadi kami akan mengubah host dari localhost menjadi 127.0.0.1 di file app.py. Jadi file tersebut akan berubah menjadi berikut -

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)

Sekarang mari kita uji aplikasi kita dengan mengetikkan perintah berikut di terminal yang sama tempat menjalankan perintah lynx -

$ 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)

Sedangkan output pada terminal pertama adalah (100 kali) sebagai berikut -

...
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   
...

Anda dapat mengamati bagaimana berbagai nilai hasil ab telah berubah dibandingkan dengan tes awal.

Menguji Aplikasi dengan Multi-Threaded Web Server

Dalam pengujian ab sebelumnya, kami telah menggunakan server web default yang dibundel dalam kerangka kerja Bottle.

Sekarang kita akan mengubah server web default single-threaded dengan yang multi-threaded. Oleh karena itu, mari kita instal perpustakaan server web multi-utas seperticherrypy atau gunicorndan beri tahu Bottle untuk menggunakannya. Kami telah memilih gunicorn untuk tujuan demonstrasi di sini (Anda juga dapat memilih yang lain) -

$  sudo apt-get install gunicorn

Dan memodifikasi file, yaitu mengubah dari web server default menjadi gunicorn -

...
run(server = 'gunicorn'...)
...

Mari kita uji aplikasi di terminal kedua.

$ 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)

Perhatikan bagaimana Permintaan per detik meningkat dari 493 menjadi 3252. Artinya, gunicorn cocok sebagai server produksi untuk aplikasi python.

Dalam bab ini, kita akan mempelajari cara menguji beberapa URL secara bersamaan. Untuk itu, kita perlu mengedit file aplikasi kita, app.py untuk memasukkan dua URL -

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)

Membuat Skrip Shell Sederhana

Anda dapat melakukan ini dengan membuat skrip shell, dengan beberapa panggilan ab. Buat file test.sh dan tambahkan baris berikut ke dalamnya -

ab -n 100 -c 10 http://127.0.0.1:8080/hello1 
ab -n 100 -c 10 http://127.0.0.1:8080/hello2

Setelah Anda menambahkan baris di atas, Simpan dan Tutup file. Jadikan file dapat dieksekusi -

chmod u+x test.sh

Sekarang mari kita jalankan skripnya -

./test.sh

Untuk menghindari pengulangan dan tujuan kejelasan, kami hanya akan menampilkan yang relevan dari keluaran ab, menunjukkan dengan titik-titik bagian mana yang telah dihilangkan, seperti berikut ini.

Keluaran

.
.
.
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.
.
.
.

Shell Script untuk Menyimpan Apache Bench Output ke File

Anda dapat menyimpan Apache Bench Output ke file dengan membuat skrip shell, dengan beberapa panggilan ab. Di akhir setiap baris, tempatkan&;ini membuat perintah berjalan di latar belakang, dan membiarkan perintah berikutnya memulai eksekusinya. Anda juga ingin mengarahkan output ke file untuk setiap url menggunakan <filename>. Misalnya, file test.sh kami akan terlihat seperti berikut setelah modifikasi -

$ 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 &

Sini, test1.txt dan test2.txt adalah file untuk menyimpan data keluaran.

Anda dapat memeriksa bahwa skrip di atas telah membuat dua file, test1.txt dan test2.txt yang berisi keluaran ab untuk masing-masing URL -

$ ls -l

Keluaran

...
-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
...

Situasi Awas

Saat menggunakan ab, Anda harus waspada terhadap pengujian yang gagal tanpa peringatan. Misalnya, jika Anda memeriksa URL yang salah, Anda mungkin mendapatkan sesuatu yang mirip dengan yang berikut ini (kami sengaja mengubah porta di sini).

$ ab -l -r -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate"  http://127.0.0.1:805/

Keluaran

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)

Dalam bab ini, kita akan memahami persiapan yang diperlukan untuk menguji halaman dinamis. Halaman web dinamis sisi server adalah halaman web yang pembuatannya dikendalikan oleh skrip sisi server yang memproses server aplikasi. Bangku apache hanya dapat memuat pengujian halaman web dinamis sisi server.

Tingkat Konkurensi dan Jumlah Total Permintaan

Tingkat konkurensi harus lebih rendah dari jumlah total permintaan.

$ 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

Penggunaan Bendera

Di bagian ini, kami akan menjelaskan penggunaan beberapa flag penting dengan perintah ab. Kami akan menggunakan istilah, opsi, dan bendera, secara bergantian.

Verbose -v

Opsi verbose dapat digunakan untuk menganalisis dan men-debug jika ada beberapa permintaan yang gagal. Indikasi umum kegagalan uji beban adalah bahwa pengujian selesai sangat cepat dan memberikan angka yang baik untuk permintaan per nilai detik. Tapi itu akan menjadi patokan yang salah. Untuk mengidentifikasi berhasil atau tidaknya, Anda dapat menggunakan-v 2opsi yang akan membuang setiap isi dan header respons ke output terminal. Perintah berikut menggambarkan kasus penggunaan -

$ ab -n 1 -v 2 http://www.generic-example-URL.com/

Output

LOG: header received:
HTTP/1.0 200 OK
…
Content-Length: 2548687

Tentu saja, jika Anda menguji respons variabel atau mengembalikan kode HTTP non-200 jika terjadi kesalahan, Anda harus mengabaikan pemeriksaan panjang dengan -lpilihan. Kita akan segera melihat HTTP non-200 ketika kita akan meluncurkan aplikasi web2py di bab-bab selanjutnya.

Tetap hidup -k

Ketika klien mengirimkan permintaan HTTP, koneksi dibuat ke server, server mengirimkan respons, dan koneksi ditutup setelah permintaan dikirim. Siklus ini berlanjut dengan setiap permintaan. Namun, dengan pengaturan keep-hidup (juga dikenal sebagai koneksi persisten), klien mempertahankan koneksi TCP yang mendasarinya terbuka untuk memfasilitasi banyak permintaan dan respons; ini menghilangkan waktu inisialisasi koneksi yang lambat dan mahal yang seharusnya ada.

Panjang dokumen variabel -l

Jika halaman web memiliki panjang variabel, maka Anda harus menggunakan opsi -l. Apache Bench tidak melaporkan kesalahan jika panjang tanggapan tidak konstan. Ini dapat berguna untuk halaman dinamis.

Penggunaan opsi -r

Bagaimana cara memaksa ab untuk tidak keluar saat menerima kesalahan? Anda harus menggunakan opsi-r. Tanpa opsi ini, pengujian Anda mungkin rusak segera setelah permintaan apa pun mencapai kesalahan soket. Namun, dengan opsi ini, kesalahan akan dilaporkan di judul kesalahan yang gagal, tetapi pengujian akan berlanjut hingga akhir.

Penggunaan opsi -H

Opsi ini digunakan untuk menambahkan baris header yang berubah-ubah. Argumen biasanya dalam bentuk baris tajuk yang valid, yang berisi pasangan nilai bidang yang dipisahkan titik dua (yaitu, "Terima-Enkode: zip / zop; 8bit").

Penggunaan opsi -C

Pada bagian berikut, kita akan mempelajari secara rinci bagaimana menggunakan opsi di atas dalam kombinasi dengan opsi untuk menggunakan nilai cookie, yaitu, -Cpilihan. Opsi -C biasanya dalam bentuk filename = valuepasangan. Bidang ini bisa diulang.

Menggunakan Cookie Sesi dengan Apache Bench

Untuk memahami cara menggunakan cookie dengan Apache Bench, kita memerlukan halaman web yang mencoba mengatur cookie. Contoh yang sangat bagus adalah aplikasi web2py yang merupakan kerangka kerja web python.

Menginstal web2py

Kami akan segera menginstal web2py aplikasi python lain. Anda dapat membaca lebih lanjut tentang cara menggunakannya di Ikhtisar Kerangka Web2py .

Python umumnya diinstal secara default di server Ubuntu dan Debian. Oleh karena itu, satu persyaratan sudah dipenuhi untuk menjalankan web2py dengan sukses.

Namun, kita perlu menginstal paket unzip untuk mengekstrak file sumber web2py dari file zip yang akan kita unduh -

$ sudo apt-get update
$ sudo apt-get install unzip

Mari kita dapatkan kerangka web2py dari situs web proyek. Kami akan mengunduh ini ke folder rumah kami -

$cd ~
$ wget http://www.web2py.com/examples/static/web2py_src.zip

Sekarang, kita dapat mengekstrak file yang baru saja kita unduh dan pindahkan ke dalam -

$ unzip web2py_src.zip
$ cd web2py

Untuk menjalankan web2py, Anda tidak perlu menginstalnya. Setelah Anda berada di dalam direktori web2py, Anda dapat menjalankannya dengan mengetik perintah berikut -

$python web2py.py

Jika semuanya berhasil, Anda akan melihat output berikut di mana Anda akan diminta untuk memilih kata sandi untuk UI administratif -

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

Namun, Anda perlu menyadari fakta bahwa antarmuka web yang diluncurkan hanya dapat diakses di komputer lokal.

Dari output, Anda dapat memahami bahwa untuk menghentikan server web, Anda harus mengetik "CTRL-C" di terminal instan. Di sisi lain, untuk menghentikan server web2py di terminal lain yang terkait dengan VPS yang sama, Anda dapat memasukkan perintah kill -SIGTERM <PID>, di mana <PID> adalah ID proses untuk server web2py, yang dalam hal ini adalah 23904.

Cookie Sesi dari web2py

Jika halaman hanya dapat diakses oleh pengguna yang masuk, tidak langsung dapat diakses dari halaman masuk, dalam hal ini Anda dapat menggunakan -Cbendera. Bendera ini mendefinisikan cookie untuk perintah ab. Tetapi Anda harus mendapatkan nilai cookie pengenal sesi dari sesi yang valid. Bagaimana cara mendapatkannya? Berbagai tutorial online akan memandu Anda menuju alat pengembang browser Chrome (atau Mozilla). Namun dalam kasus pengujian kami, karena aplikasi hanya tersedia di baris perintah, kami akan menggunakan browser lynx untuk mendapatkan nilainya.

Mari kita dapatkan nilai cookie dari sebuah sesi terlebih dahulu. Buka terminal lain dan ketik perintah berikut -

$ lynx http://127.0.0.1:8000/

Menanggapi perintah di atas, lynx akan meminta izin Anda untuk menerima cookie dari server web2py seperti yang ditunjukkan pada gambar di bawah.

Catat nilai cookie sebelum mengetik yuntuk menerima cookie. Sekarang terminal akan terlihat seperti gambar berikut - situs web di terminal!

Setelah mendapatkan nilai cookie, sekarang kita akan menjalankan tes ab. Untuk itu, kita harus membuka terminal ketiga (lihat gambar di bawah) -

Sekarang, mari kita gunakan -C flag di terminal ketiga -

$ ab -n 100 -c 10 -C session_name = 127.0.0.1-643dad04-3c34  http://127.0.0.1:8000/

Keluaran

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)

Dari keluaran di atas, kami mencatat beberapa poin. Pertama, web2py menggunakan server web Rocket . Kami juga mencatat bahwa kami mendapatkan 'Respons non-2xx' selain judul yang telah dibahas sebelumnya dalam keluaran. Secara umum, protokol Http menanggapi permintaan menggunakan kode tanggapan, dan apa pun dalam rentang 200-an berarti 'oke', dan sisanya sesuai dengan beberapa masalah. Misalnya, 400-an adalah kesalahan terkait sumber daya seperti 404 File Not Found. 500 sesuai dengan kesalahan server. Dalam kasus instan kami, tidak ada kesalahan di mana pun kecuali saat kami menggunakan opsi -C. Ini dapat disembunyikan menggunakan opsi -l seperti yang telah dijelaskan.

Memeriksa Halaman Admin

Di bagian ini, kita akan memahami cara memeriksa halaman admin. Untuk tujuan perbandingan, mari kita uji URL lain dari aplikasi web2py -

$ ab -n 100 -c 10 session_name = 127.0.0.1-643dad04-3c34  http://127.0.0.1:8000/admin

Keluaran

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)

Anda harus secara khusus mencatat statistik masing-masing di bagian "Waktu Koneksi" dan "Persentase permintaan yang dilayani ..." dari http://127.0.0.1:8000/ dan http://127.0.0.1:8000/admin. Terdapat sebuah perbedaan yang besar.

Menggunakan Opsi Batas Waktu

Umumnya, opsi Timelimit adalah pilihan yang rumit. Mari kita pahami ini dari manual ab , yang cukup jelas -

-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.

Mari kita jalankan pengujian dengan opsi ini. Kami akan mencatat pengamatan kami setelah melalui output -

$ ab -n 100 -c 10 -t 60   http://127.0.0.1:8000/

Keluaran

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)

Perhatikan bahwa output menunjukkan opsi ini menggantikan jumlah permintaan yang ditentukan oleh -nopsi dan berlanjut hingga 50 ribu permintaan. Namun, karena permintaan ditangani dengan sangat cepat, ab telah dihentikan segera setelah tanda 50k tercapai - dalam 22 detik (lihat judul Waktu yang diambil untuk pengujian) dalam kasus instan.

Anda dapat menguji penggantian perintah yang sama http://127.0.0.1:8000/ dengan http://127.0.0.1:8000/admin (dengan asumsi ini adalah aplikasi web2py kami) atau situs web pihak ketiga seperti https://www.apache.org/, perhatikan perbedaan statistiknya.

Daftar Periksa Sebelum Melakukan Tes Beban

Ada beberapa pemeriksaan yang akan membantu Anda menjalankan pengujian dengan sukses, dan mengukur kinerja secara akurat. Pertimbangkan kondisi berikut sebelum melakukan uji beban -

  • Pastikan tidak ada modul python tambahan yang dimuat.

  • Untuk menghindari TCP / IP Port Exhaustion, Anda biasanya harus menunggu 2-3 menit sebelum beralih ke tes ab lainnya.

  • Pastikan jumlah koneksi serentak lebih rendah dari Apache Worker Threads.

  • Anda harus me-reboot server sebelum melakukan tes lain, jika Apache atau python macet.

Dalam bab ini, kami akan menjelaskan berbagai kombinasi -n dan -c dengan tanda penting untuk meningkatkan beban di server web Anda secara bertahap.

Anda harus fokus pada bagaimana metrik berikut berubah saat Anda meningkatkan beban -

  • Permintaan per detik
  • Waktu Koneksi (md)
  • Persentase permintaan yang dilayani dalam waktu tertentu (md)

Anda juga harus memperhatikan nilai ambang ketika server mulai macet dan Anda mulai mendapatkan permintaan yang gagal.

1 Pengguna Bersamaan Melakukan 100 Kunjungan Halaman

Mari kita lakukan 100 pemuatan halaman berurutan oleh satu pengguna -

$ ab -l -r -n 100 -c 1 -k -H "Accept-Encoding: gzip, deflate"  http://127.0.0.1:8000/

Keluaran

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)

5 Pengguna Bersamaan Masing-masing Melakukan 10 Kunjungan Halaman

Kasus ini sesuai dengan beban puncak di situs web yang mendapat sekitar 50.000+ klik sebulan.

$ ab -l -r -n 10 -c 5 -k -H "Accept-Encoding: gzip, deflate"  http://127.0.0.1:8000/

Dalam keluaran berikutnya berikut, kami akan menghilangkan tajuk umum untuk tujuan kejelasan.

Keluaran

...
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)

10 Pengguna Bersamaan Masing-masing Melakukan 10 Kunjungan Halaman

Tes ini sesuai dengan 100 pemuatan halaman oleh 10 pengguna bersamaan yang berbeda, setiap pengguna melakukan 10 pemuatan halaman berurutan.

$ ab  -r -n 10 -c 10 -k -H "Accept-Encoding: gzip, deflate"  http://127.0.0.1:8000/

Keluaran

...
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)

20 Pengguna Bersamaan Masing-masing Melakukan 20 Kunjungan Halaman

Tes ini sesuai dengan 400 pemuatan halaman oleh 20 pengguna bersamaan yang berbeda, setiap pengguna melakukan 20 pemuatan halaman berurutan.

$ ab -r -n 20 -c 20 -k -H “Accept-Encoding: gzip, deflate” http://127.0.0.1:8000/

Keluaran

...
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)

30 Pengguna Bersamaan Masing-masing Melakukan 30 Kunjungan Halaman

Tes ini sesuai dengan 900 pemuatan halaman oleh 30 pengguna bersamaan yang berbeda, setiap pengguna melakukan 30 pemuatan halaman berurutan.

$ ab  -r -n 30 -c 30 -k -H "Accept-Encoding: gzip, deflate"  http://127.0.0.1:8000/

Keluaran

...
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)

Kami sekarang telah mempelajari cara meningkatkan beban secara bertahap di situs web dan menguji kinerjanya.

Dalam bab ini, kita akan membandingkan output dengan dan tanpa flag. Mari kita lihat bagaimana penggunaan tanda yang tepat dapat meningkatkan kinerja aplikasi web Anda. Sebelumnya, kita perlu memahami bagaimana jika aplikasi Anda sederhana maka Anda mungkin tidak melihat perbedaannya. Seperti halnya dengan aplikasi sederhana kita, dengan flag dan tanpa flag. Kemudian kami akan melakukan pengujian yang sama denganhttps://www.apache.org/ URL, dan lihat perbedaannya.

Menguji Aplikasi kami tanpa Bendera

Di bagian ini, kita akan memahami cara menguji aplikasi kita tanpa flag.

$ ab -n 100 -c 10 http://127.0.0.1:8000/

Keluaran

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)

Menguji Aplikasi kami dengan Bendera

Di bagian ini, kita akan memahami bagaimana menguji aplikasi kita dengan flag.

$ ab -l -r -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate"  http://127.0.0.1:8000/

Keluaran

...
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)

Kami hanya dapat mencatat bahwa tidak banyak perbedaan antara statistik keluaran.

Menguji Situs Web Organisasi Apache tanpa Bendera

Sekarang mari kita lihat cara menguji Situs Web Organisasi Apache tanpa tanda.

$ ab -n 100 -c 10 http://www.apache.org/

Keluaran

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)

Menguji Situs Web Organisasi Apache dengan Bendera

Mari kita sekarang menguji Situs Web Organisasi Apache dengan Bendera.

$ ab -l -r -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate"  http://www.apache.org/

Keluaran

...
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)

Anda dapat dengan mudah mencatat bagaimana permintaan per detik meningkat dengan penggunaan flag. Dalam kasus instan, ini terutama karena penggunaan-H "Accept-Encoding: gzip, deflate karena tanda ini memberi tahu server Apache untuk melayani permintaan dalam gzipped format.

Mempertimbangkan Hasil Apache Bench

Beberapa poin penting perlu dipertimbangkan dalam hal hasil Apache Bench. Ini akan membantu kami merancang keseluruhan strategi kami untuk menghilangkan kemacetan dalam aplikasi kami dan meningkatkan kinerjanya.

Kita perlu Permintaan Per Detik. Ini memberi kita gambaran tentang seberapa baik pengaturan server web kita bekerja; semakin besar angkanya, semakin baik kinerjanya. Kemudian datang waktu koneksi (ms) dan persentase permintaan yang dilayani. Anda mungkin harus mengubah pengaturan server web Anda untuk mengubah metrik ini ke kinerja yang Anda inginkan.

Periksa apakah ada kesalahan di Apache atau log kesalahan server web bekas atau log (umum). Saat Anda menambah beban, semuanya akan mulai tersendat: masalah memori akan mulai muncul. Banyak skrip python akan mulai macet jika tidak ditulis dengan mempertimbangkan konkurensi.

Anda perlu mencari tahu apa nilai konkurensi kritis yang di atasnya server web Anda mogok dan / atau waktu habis? Biasanya ini harus terjadi pada level konkurensi yang cukup tinggi. Jika nilai ini rendah, ada yang salah dan Anda perlu menyesuaikan pengaturan ini lebih rendah / lebih tinggi.

Kesimpulan

Dalam tutorial ini kita mempelajari bagaimana Apache Bench dapat digunakan untuk menguji beban situs web atau aplikasi web apa pun. Apache Bench dapat menjadi alat yang sangat berharga untuk menentukan bagaimana penyiapan server aplikasi web Anda harus ditingkatkan, untuk mengurangi kemacetan dan meningkatkan kinerja. Sekarang setelah Anda terbiasa dengan penggunaan dasar Apache Bench, Anda dapat mulai dengan membuat rencana pengujian baru untuk mengukur kinerja aplikasi Anda dalam berbagai skenario.