Apache ab: tolong jelaskan hasilnya

31

Saya sudah melihat-lihat, dan tidak dapat menemukan penjelasan rinci tentang output sama sekali. Sebagian besar memang mudah dipahami, tetapi ada satu bagian yang membingungkan saya:

Time per request:       109537.505 [ms] (mean)
Time per request:       109.538 [ms] (mean, across all concurrent requests)

Ini berarti - bagi saya - bahwa jika Anda mengukur seluruh permintaan bersamaan (apa pun artinya) maka permintaan tersebut tiba-tiba dikembalikan 100x lebih cepat. Mengapa waktu per permintaan banyak berubah? Ini tidak masuk akal.

Apakah ada penjelasan rinci tentang ini dan bagian lain dari output ab?

Mei
sumber

Jawaban:

53

Jika Anda memiliki concurrency yang ditetapkan pada 1, tidak ada perbedaan antara keduanya. Itu mulai menjadi masalah ketika Anda memiliki lebih dari 1 permintaan dilakukan secara bersamaan.

Mari kita lihat contoh dari apa yang saya dapatkan di localhost:

ab -c 1 -n 1000 http://localhost/

akan memberi:

Time taken for tests:   3.912 seconds
Time per request:       3.912 [ms] (mean)
Time per request:       3.912 [ms] (mean, across all concurrent requests)

Ini berarti bahwa 3,912 detik diperlukan untuk melakukan 1000 permintaan satu per satu. Jadi satu permintaan membutuhkan rata-rata 3,912 detik / 1000 = 3,912 ms.

Sekarang mari kita tingkatkan sedikit konkurensi:

ab -c 10 -n 1000 http://localhost/

Time taken for tests:   0.730 seconds
Time per request:       7.303 [ms] (mean)
Time per request:       0.730 [ms] (mean, across all concurrent requests)

Kali ini alih-alih 3,912 detik kita hanya membutuhkan 0,730 detik untuk menyelesaikan pekerjaan. Kami telah melakukan 1000 permintaan dalam 0,730 detik, jadi satu permintaan akan mengambil rata-rata 0,730 detik / 1000 = 0,730 ms (baris terakhir). Tetapi situasinya agak berbeda, karena kami sekarang melakukan 10 permintaan secara bersamaan. Jadi sebenarnya nomor kami di sini tidak mencerminkan waktu sebenarnya yang diperlukan untuk satu permintaan untuk menyelesaikan . 0,730 ms * 10 (jumlah permintaan bersamaan) = 7,303 ms. Itu waktu yang dibutuhkan rata-rata untuk satu permintaan untuk menyelesaikan jika dieksekusi secara bersamaan (atau lebih tepatnya, secara terpisah pada level concurrency saat ini).

Angka terakhir yang Anda lihat (0,730 ms) digunakan untuk memberi tahu kira-kira berapa banyak total waktu akan meningkat jika Anda telah menambahkan 1 permintaan ( -n 1001) menggunakan tingkat konkurensi saat ini -c 10(paling tidak secara teoritis memang demikian).

7,303 ms memberi Anda tinjauan tentang berapa lama satu permintaan terisolasi akan berjalan.

Perubahan yang Anda lihat antara contoh -c 1dan -c 10:

[-c 1 ]: Time per request:       3.912 [ms] (mean)
[-c 10]: Time per request:       7.303 [ms] (mean)

berarti satu permintaan tidak berjalan lebih cepat jika itu adalah satu-satunya yang dieksekusi -c 1. Jika ada beberapa permintaan yang -c 10bersaing untuk mendapatkan sumber daya, satu permintaan akan membutuhkan waktu lebih lama untuk diselesaikan. Tetapi jika Anda mempertimbangkan fakta bahwa Anda melakukan 10 permintaan pada saat yang sama, dalam 7.303 ms ini Anda berurusan dengan 10 permintaan, bukan 1.

Jadi sebagai ukuran keterlambatan untuk satu permintaan - 7.303 ms lebih berguna. Tetapi sebagai ukuran kinerja - 0,730 ms lebih bermakna. Bahkan sebagai 0,730 ms <3,912 ms Anda melihat bahwa Anda akan dapat melayani lebih banyak permintaan per detik secara agregat jika Anda mengizinkan 10 permintaan bersamaan.

Karol J. Piczak
sumber