Menguji performa web server dengan Apache Bench
Tujuan kita beralih dari shared hosting ke Virtual Private Server adalah untuk mendapatkan performa yang lebih baik dan setidaknya tidak mudah muncul error karena terkena batasan resource. Tapi darimana kita tahu seberapa mampu stack web server yang baru kita pasangkan – baik itu LAMP atau LEMP misalnya – bisa bekerja dengan baik? Kalau hanya melihat spesifikasi VPS bisa dikatakan ini hanya langkah awalnya dan selanjutnya bisa kita benchmark web server tadi.
Alat yang kita manfaatkan adalah ab
atau kepanjangannya adalah Apache Bench yang fungsinya akan mensimulasikan kunjungan ke situs anda. Software ini merupakan bawaan dari Apache, misal tidak ada maka anda perlu menginstallnya dahulu:
- Debian/Ubuntu:
apt-get install apache2-utils
- RHEL/CentOS/Fedora:
yum install httpd-tools
Kemudian kita eksekusi perintahnya ke url website yang dituju:
ab -k -c 50 -n 1000 -H "Accept-Encoding: gzip, deflate" http://google.co.id/
Saya jelaskan dulu parameter yang digunakan dalam perintahnya:
-k
Mengirimkan instruksi ke web server agar koneksi yang sudah dibuka tidak ditutup melainkan digunakan ulang. Ini meniru perilaku browser.-c
Berapa banyak koneksi bersamaan yang dibuka. Bisa dianalogikan dengan banyaknya pengunjung dalam satu waktu.-n
Jumlah permintaan konten yang akan dibuat ke web server.-H
Pada umumnya web server sudah standar mengaktifkan kompresi GZIP untuk koneksinya dan dengan header"Accept-Encoding: gzip, deflate"
akan diminta versi tersebut. Kalau anda hilangkan bisa terlihat selisih performanya yang cukup terasa.
Nah… hasil dari eksekusi perintah diatas kurang lebih seperti ini:
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking google.co.id (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software: nginx
Server Hostname: google.co.id
Server Port: 80
Document Path: /
Document Length: 5293 bytes
Concurrency Level: 50
Time taken for tests: 5.102 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Keep-Alive requests: 1000
Total transferred: 5846656 bytes
HTML transferred: 5392581 bytes
Requests per second: 195.99 [#/sec] (mean)
Time per request: 255.116 [ms] (mean)
Time per request: 5.102 [ms] (mean, across all concurrent requests)
Transfer rate: 1119.03 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 6 29.1 0 177
Processing: 18 214 292.5 107 3095
Waiting: 5 175 236.6 104 3095
Total: 18 220 295.5 109 3195
Percentage of the requests served within a certain time (ms)
50% 109
66% 186
75% 203
80% 295
90% 491
95% 698
98% 967
99% 1825
100% 3195 (longest request)
Hal yang diperhatikan sebagai dasarnya adalah:
- Berapa hasil dari
Requests per second
karena ini menunjukkan seberapa banyak pengunjung yang dilayani dalam satu detik, tapi ingat satu pengunjung bisa membuka beberapa koneksi/permintaan konten sekaligus. - Angka pada
Percentage of the requests served within a certain time (ms)
, ini menandakan seluruh permintaan koneksi berhasil dilayankan dalam waktu berapa milidetik. Bagi 1000 untuk mendapatkan 1 detik, jadi kalau dari hasil benchmark diatas paling lama bisa mencapai 3.2 detik. Ini kalau anda matikan parameter header GZIP dan keepalive bisa melonjak ke 10 detik lebih.
Semoga bermanfaat. 🙂