Bagaimana Cara Melakukan Tolok Ukur Kinerja Server Web?

Apakah Anda tahu waktu respons rata-rata situs web Anda? Tahukah Anda berapa banyak pengguna bersamaan yang dapat ditangani situs Anda?

Pengujian beban sangat penting untuk aplikasi web untuk mengetahui kapasitas situs web. Jika Anda memilih server web, maka salah satu hal pertama yang ingin Anda lakukan adalah melakukan pengujian beban dan melihat mana yang bekerja dengan baik untuk Anda.

Tolok ukur dapat membantu Anda memutuskan;

  • Server web mana yang bekerja paling baik
  • Jumlah server yang Anda butuhkan untuk melayani x jumlah permintaan
  • Konfigurasi mana yang memberi Anda hasil terbaik
  • Tumpukan teknologi mana yang berkinerja lebih baik
  • Saat situs Anda akan tampil lebih lambat atau rusak

Ada beberapa alat online untuk melakukan stress test; namun, jika Anda mencari solusi internal atau hanya ingin membandingkan kinerja server web, Anda dapat menggunakan ApacheBench dan alternatifnya, beberapa alat yang tercantum di bawah ini.

Saya telah menggunakan server web Apache & Nginx yang dihosting DigitalOcean untuk mengujinya.

ApacheBench

ApacheBench (ab) adalah program baris perintah sumber terbuka yang bekerja dengan server web apa pun. Dalam posting ini, saya akan menjelaskan cara menginstal program kecil ini dan melakukan uji beban untuk membandingkan hasilnya.

Apache

Mari instal ApacheBench dengan menggunakan perintah yum.

yum install httpd-tools

Jika Anda sudah memiliki httpd-tools, Anda dapat mengabaikannya.

Sekarang, mari kita lihat bagaimana kinerjanya untuk 5000 permintaan dengan konkurensi 500.

[[email protected] ~]# ab -n 5000 -c 500 http://localhost:80/
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 localhost (be patient)
Completed 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests
Server Software:        Apache/2.2.15
Server Hostname:        localhost
Server Port:            80
Document Path:          /
Document Length:        4961 bytes
Concurrency Level:      500
Time taken for tests:   13.389 seconds
Complete requests:      5000
Failed requests:        0
Write errors:           0
Non-2xx responses:      5058
Total transferred:      26094222 bytes
HTML transferred:       25092738 bytes
Requests per second:    373.45 [#/sec] (mean)
Time per request:       1338.866 [ms] (mean)
Time per request:       2.678 [ms] (mean, across all concurrent requests)
Transfer rate:          1903.30 [Kbytes/sec] received
Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0   42  20.8     41    1000
Processing:     0  428 2116.5     65   13310
Waiting:        0  416 2117.7     55   13303
Total:         51  470 2121.0    102   13378
Percentage of the requests served within a certain time (ms)
50%    102
66%    117
75%    130
80%    132
90%    149
95%    255
98%  13377
99%  13378
100%  13378 (longest request)
[[email protected] ~]#

Jadi seperti yang Anda lihat, Apache telah menangani 373 permintaan per detik, dan butuh total 13,389 detik untuk melayani total permintaan.

  5 Penggunaan Kreatif untuk Colokan Pintar

Sekarang Anda tahu konfigurasi default dapat melayani banyak permintaan ini sehingga ketika Anda membuat perubahan konfigurasi, Anda dapat melakukan pengujian lagi untuk membandingkan hasilnya dan memilih yang terbaik.

Nginx

Mari kita uji apa yang kita lakukan untuk Apache sehingga Anda dapat membandingkan mana yang berkinerja lebih baik.

[[email protected] ~]# ab -n 5000 -c 500 http://localhost:80/
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 localhost (be patient)
Completed 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests
Server Software:        nginx/1.10.1
Server Hostname:        localhost
Server Port:            80
Document Path:          /
Document Length:        3698 bytes
Concurrency Level:      500
Time taken for tests:   0.758 seconds
Complete requests:      5000
Failed requests:        0
Write errors:           0
Total transferred:      19660000 bytes
HTML transferred:       18490000 bytes
Requests per second:    6593.48 [#/sec] (mean)
Time per request:       75.832 [ms] (mean)
Time per request:       0.152 [ms] (mean, across all concurrent requests)
Transfer rate:          25317.93 [Kbytes/sec] received
Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0    6  11.0      2      53
Processing:     5   19   8.2     17      53
Waiting:        0   18   8.2     16      47
Total:         10   25  17.4     18      79
Percentage of the requests served within a certain time (ms)
50%     18
66%     21
75%     21
80%     22
90%     69
95%     73
98%     75
99%     76
00%     79 (longest request)
[[email protected] ~]#

WOW!

Apakah kamu melihat itu?

Nginx menangani 6593 permintaan per detik! Seorang pemenang.

Jadi Anda melihat hanya membandingkan dengan dua server web Anda akan mendapatkan ide mana yang akan dipilih untuk aplikasi web Anda.

Tes di atas adalah pada CentOS 6.8, 64 bit. Anda dapat mencoba beberapa kombinasi versi OS & Web Server untuk hasil yang optimal.

Tidak suka ApacheBench karena alasan apa pun? Jangan khawatir, ada banyak hal lain yang dapat Anda gunakan untuk memuat HTTP.

PENGEPUNGAN

PENGEPUNGAN adalah utilitas uji beban HTTP yang didukung di UNIX. Anda dapat memasukkan beberapa URL dalam file teks untuk memuat pengujian. Anda dapat menginstal pengepungan menggunakan yum.

# yum install siege

Mari jalankan pengujian dengan 500 permintaan bersamaan selama 5 detik.

[[email protected] ~]# siege -q -t 5S -c 500 http://localhost/
Lifting the server siege...      done.
Transactions:                       4323 hits
Availability:               100.00 %
Elapsed time:                       4.60 secs
Data transferred:        15.25 MB
Response time:                    0.04 secs
Transaction rate:       939.78 trans/sec
Throughput:                         3.31 MB/sec
Concurrency:                      37.97
Successful transactions:        4323
Failed transactions:                0
Longest transaction:            1.04
Shortest transaction:            0.00
[[email protected] ~]#

Untuk memecah parameter.

  30 Software CAD Pemula Terbaik

-q – untuk menjalankannya dengan tenang (tidak menampilkan detail permintaan)

-t – jalankan selama 5 detik

-c – 500 permintaan bersamaan

Jadi seperti yang Anda lihat, ketersediaannya 100% dan waktu responsnya 0,04 detik. Anda dapat men-tweak parameter uji beban berdasarkan tujuan Anda.

Ali

Ali adalah alat pengujian beban yang relatif baru untuk melakukan analisis waktu nyata. Ini mendukung banyak platform untuk diinstal, termasuk Docker.

Setelah diinstal, jalankan ali untuk melihat detail penggunaan.

[email protected]:~# ali
no target given
Usage:
  ali [flags] <target URL>

Flags:
  -b, --body string         A request body to be sent.
  -B, --body-file string    The path to file whose content will be set as the http request body.
      --debug               Run in debug mode.
  -d, --duration duration   The amount of time to issue requests to the targets. Give 0s for an infinite attack. (default 10s)
  -H, --header strings      A request header to be sent. Can be used multiple times to send multiple headers.
  -k, --keepalive           Use persistent connections. (default true)
  -M, --max-body int        Max bytes to capture from response bodies. Give -1 for no limit. (default -1)
  -m, --method string       An HTTP request method for each request. (default "GET")
  -r, --rate int            The request rate per second to issue against the targets. Give 0 then it will send requests as fast as possible. (default 50)
  -t, --timeout duration    The timeout for each request. 0s means to disable timeouts. (default 30s)
  -v, --version             Print the current version.

Examples:
  ali --duration=10m --rate=100 http://host.xz

Author:
  Ryo Nakao <[email protected]>
[email protected]:~#

Seperti yang Anda lihat di atas, Anda memiliki opsi untuk mengirim header HTTP, durasi pengujian, batas kecepatan, batas waktu, dan lainnya. Saya melakukan tes cepat pada Alat techking.id dan inilah hasilnya.

Laporan ini bersifat interaktif dan memberikan informasi latensi terperinci.

Gobench

Gobench ditulis dalam bahasa Go dan utilitas pengujian beban sederhana untuk membandingkan kinerja server web. Ini mendukung lebih dari 20.000 pengguna bersamaan yang tidak dimiliki ApacheBench.

  Cara Membatasi Data di Google Spreadsheet dengan Validasi Data

Apache JMeter

JMeter adalah salah satu alat sumber terbuka paling populer untuk mengukur kinerja aplikasi web. JMeter adalah aplikasi berbasis java dan bukan hanya server web, tetapi Anda dapat menggunakannya melawan PHP, Java. ASP.net, SOAP, REST, dll.

JMeter mendapat GUI ramah yang layak, dan versi terbaru 3.0 membutuhkan Java 7 atau lebih tinggi untuk meluncurkan aplikasi. Anda harus mencoba JMeter jika tujuan Anda adalah mengoptimalkan kinerja aplikasi web.

kerja

kerja adalah alat pengukuran kinerja modern lainnya untuk memberi beban pada server web Anda dan memberi Anda detail latensi, permintaan per detik, transfer per detik, dll.

Dengan wrk, Anda dapat menentukan untuk menjalankan uji beban dengan sejumlah utas.

Mari kita ambil contoh menjalankan pengujian selama 5 menit dengan 500 pengguna bersamaan dengan 8 utas.

wrk –t8 –c500 -d300s http://localhost

Meriam otomatis

Terinspirasi oleh pekerjaan, meriam otomatis ditulis dalam Node.js. Anda dapat menggunakannya secara terprogram, melalui API atau utilitas mandiri. Yang Anda butuhkan hanyalah menginstal NodeJS sebagai prasyarat.

Anda dapat mengontrol sejumlah koneksi, permintaan, durasi, pekerja, batas waktu, kecepatan koneksi, dan menawarkan banyak opsi untuk membandingkan aplikasi web Anda.

Curl-loader

curl-loader ditulis dalam C untuk mensimulasikan pemuatan aplikasi, dan mendukung SSL/TLS. Bersamaan dengan pengujian halaman web, Anda juga dapat menggunakan alat sumber terbuka ini untuk melakukan pemuatan di server FTP.

Anda dapat membuat rencana pengujian dengan campuran HTTP, HTTPS, FTP, dan FTPS dalam satu konfigurasi batch.

httperf

Itu httperf adalah alat berkinerja tinggi yang berfokus pada tolok ukur tingkat mikro dan makro. Ini mendukung protokol HTTP/1.1 dan SSL.

Jika Anda memiliki jumlah pengguna bersamaan yang diharapkan dan ingin menguji apakah server web Anda dapat melayani sejumlah permintaan, Anda dapat menggunakan perintah berikut.

httperf --server localhost --port 80 --num-conns 1000 --rate 100

Perintah di atas akan menguji dengan 100 permintaan per detik untuk 1000 permintaan HTTP.

Tsung

Tsung adalah alat pengujian stres terdistribusi multi-protokol untuk menekankan server HTTP, SOAP, PostgreSQL, LDAP, XAMP, MySQL. Ini mendukung HTTP/1.0, HTTP/1.1, dan cookie ditangani secara otomatis.

Membuat laporan dapat dilakukan dengan Tsung.

Kesimpulan

Saya harap alat pembandingan di atas memberi Anda gambaran tentang kinerja server web Anda dan memutuskan apa yang terbaik untuk proyek Anda.

Selanjutnya, jangan lupa untuk memantau performa website Anda.