Persiapan untuk Menguji Halaman Dinamis
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 dengan sangat cepat dan memberikan angka yang baik untuk permintaan nilai per 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 saat 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 mendasari 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. Argumennya 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.