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:

  1. 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.
  2. 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. 🙂

Tinggalkan komentar