Muat Pengujian dengan AB… permintaan palsu gagal (panjang)

209

Untuk melakukan beberapa pengujian beban, untuk rasa ingin tahu saya sendiri, di server saya, saya menjalankan:

ab -kc 50 -t 200 http://localhost/index.php

Ini membuka 50 koneksi tetap hidup selama 200 detik dan hanya membanting server saya dengan permintaan untuk index.php

Dalam hasil saya, saya mendapatkan:

Concurrency Level:      50
Time taken for tests:   200.007 seconds
Complete requests:      33106
Failed requests:        32951
   (Connect: 0, Receive: 0, Length: 32951, Exceptions: 0)
Write errors:           0
Keep-Alive requests:    0
Total transferred:      1948268960 bytes
HTML transferred:       1938001392 bytes
Requests per second:    165.52 [#/sec] (mean)
Time per request:       302.071 [ms] (mean)
Time per request:       6.041 [ms] (mean, across all concurrent requests)
Transfer rate:          9512.69 [Kbytes/sec] received

Perhatikan permintaan 32951 "gagal". Saya tidak tahu ini.

Saat tes sedang berjalan, saya dapat mengakses situs web saya dari komputer di rumah dengan sempurna, meskipun waktu pemuatan halaman di bagian bawah halaman dilaporkan sebagai 0,5 bukannya biasa 0,02. Namun saya tidak pernah memiliki permintaan yang gagal.

Jadi mengapa AB melaporkan bahwa setengah dari koneksi gagal? Dan apa arti "Panjang:" dalam konteks itu?

Benjamin
sumber
Apakah situs web Anda memiliki penyeimbang beban? Lihat posting blog saya tentang pengujian beban dengan penyeimbang beban yang mungkin menjelaskan situasi "itu berfungsi untuk saya" dalam pengujian beban.
Patrick Lightbody

Jawaban:

361

Lupakan. "Kegagalan panjang" hanya menunjukkan bahwa sekitar separuh waktu lamanya tanggapan berbeda.

Karena isinya dinamis, mungkin pengidentifikasi sesi atau semacamnya.

Jeff Atwood
sumber
8
Hei, saya hanya mengalami "masalah" yang sama dan senang jawaban ini ada di sini. Terima kasih!
Richard Hurt
2
Terima kasih atas jawabannya, saya memiliki keraguan yang persis sama.
Saiyine
63
Ya, dua tahun kemudian jawaban ini masih sangat berguna.
Sergi
11
Jangan terlalu cepat untuk mengaitkan ini dengan ketidakcocokan panjang konten variabel. ab tidak melaporkan kode status HTTP 500 sebagai kesalahan dalam ringkasannya. Alasan ketidakcocokan panjang mungkin karena Anda memiliki kesalahan nyata. Anda dapat menggunakan -v 4 untuk mendapatkan info lebih lanjut (pipa yang lebih baik ke file karena akan ada banyak hasil cetak).
Tal Lev-Ami
3
Sebenarnya itu dijelaskan dalam manual ab di sini httpd.apache.org/docs/current/programs/ab.html "Jika panjang dokumen berubah selama pengujian, responsnya dianggap sebagai kesalahan."
Joeахар Joe
132

Untuk menggambarkan masalah dengan kata lain:

Alat benchmarking apache (ab) mengasumsikan bahwa panjang konten respon akan sama selama seluruh pengujian. Ini menyimpan panjang konten tanggapan pertama. Jika ada tanggapan lebih lanjut yang memiliki panjang konten berbeda, mereka menghasilkan "kegagalan panjang".

Laporan bug apache berikut tampaknya mengonfirmasi bahwa: ASF Bug 42040

Ringkasan : Jika Anda menayangkan konten dengan panjang variabel apa pun, Anda mungkin harus mengabaikan kegagalan permintaan semacam ini.

Sunting : Baru-baru ini saya perhatikan bahwa abperintah memiliki opsi baru (setidaknya untuk saya):

-l   Accept variable document length (use this for dynamic pages)

Saya dapat melihatnya di ab Versi 2.3 <$ Revisi: 1528965 $> tetapi tidak dapat melihatnya di ab Versi 2.3 <$ Revisi: 655654 $> , jadi itu mungkin ditambahkan relatif baru-baru ini.

Dariusz Walczak
sumber
4
Bagi siapa pun yang menggunakan Mac, kemungkinan ab versi Anda ada di belakang dan -Aku tidak mau. Anda dapat menginstal dari sumber atau melalui homebrew, tetapi "brew install ab" tidak berfungsi karena itu bagian dari paket apache - Anda dapat menginstal dengan "brew install homebrew / apache / ab".
netpoetica
8

Maaf telah membangkitkan kembali pertanyaan lama, tetapi itu adalah pertanyaan pertama yang muncul di Google. Kadang-kadang kesalahan panjang yang dilaporkan oleh ab mungkin disebabkan oleh masalah nyata: jika koneksi ditutup sisi server sebelum jumlah total byte yang dinyatakan dalam header Panjang Konten belum diterima oleh klien. Itu bisa terjadi jika ada pihak lain antara klien dan server, misalnya, penyeimbang beban buatan tangan naif (kasus saya).

zentrunix
sumber