Kiểm tra tải với các yêu cầu thất bại giả (chiều dài)


209

Để thực hiện một số thử nghiệm tải, vì sự tò mò của riêng tôi, trên máy chủ của tôi, tôi đã chạy:

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

Điều này mở ra 50 kết nối duy trì trong 200 giây và chỉ cần đóng sập máy chủ của tôi với các yêu cầu cho index.php

Trong kết quả của tôi, tôi nhận được:

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

Lưu ý các yêu cầu "không thành công" 32951. Tôi không thể hình này ra.

Khi thử nghiệm đang chạy, tôi có thể truy cập trang web của mình từ máy tính ở nhà một cách hoàn hảo, mặc dù thời gian tải trang ở cuối trang được báo cáo là 0,5 thay vì 0,02 thông thường. Tuy nhiên tôi chưa bao giờ có một yêu cầu thất bại.

Vậy tại sao AB báo cáo rằng một nửa các kết nối không thành công? Và "Độ dài:" nghĩa là gì trong bối cảnh đó?


Trang web của bạn có một bộ cân bằng tải? Xem bài đăng trên blog của tôi về kiểm tra tải với các bộ cân bằng tải có thể giải thích tình huống "nó hoạt động cho tôi" trong kiểm tra tải.
Patrick Lightbody

Câu trả lời:


360

Đừng bận tâm. "Thất bại độ dài" chỉ đơn thuần chỉ ra rằng khoảng một nửa thời gian phản hồi là khác nhau.

Vì nội dung là động, có lẽ đó là định danh phiên hoặc đại loại như thế.


8
Này, tôi vừa gặp phải "vấn đề" tương tự và rất vui vì câu trả lời này đã có ở đây. Thanx!
Richard Hurt

2
Cảm ơn câu trả lời, tôi đã có chính xác cùng một nghi ngờ.
Saiyine

63
Vâng, hai năm sau câu trả lời này vẫn thực sự hữu ích.
Sergi

11
Đừng quá nhanh chóng để quy kết điều này với sự không phù hợp về chiều dài nội dung. ab không báo cáo mã trạng thái HTTP 500 là lỗi trong bản tóm tắt của nó. Lý do cho sự không phù hợp độ dài có thể là do bạn có một lỗi thực sự. Bạn có thể sử dụng -v 4 để có thêm thông tin (đường dẫn tốt hơn đến một tệp vì sẽ có rất nhiều bản in).
Tal Lev-Ami

3
Trên thực tế, nó đã được giải thích trong hướng dẫn sử dụng ab ở đây httpd.apache.org/docs/civerse/programs/ab.html "Nếu độ dài tài liệu thay đổi trong quá trình thử nghiệm, phản hồi được coi là lỗi."
Захх Joe

132

Để mô tả vấn đề theo cách khác:

Công cụ đo điểm chuẩn apache (ab) giả định rằng độ dài của nội dung phản hồi sẽ giống nhau trong toàn bộ thử nghiệm. Nó lưu trữ độ dài nội dung của phản hồi đầu tiên. Nếu bất kỳ phản hồi nào khác có độ dài nội dung khác nhau, chúng sẽ dẫn đến "lỗi độ dài".

Sau báo cáo lỗi apache dường như xác nhận rằng: ASF Bug 42040

Tóm tắt : Nếu bạn đang phục vụ bất kỳ nội dung nào có độ dài thay đổi, có lẽ bạn nên bỏ qua loại lỗi yêu cầu ab này.

Chỉnh sửa : Gần đây tôi đã nhận thấy rằng ablệnh có một tùy chọn mới (ít nhất là đối với tôi):

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

Tôi có thể thấy nó trong ab Phiên bản 2.3 <$ Revision: 1528965 $> nhưng không thể thấy nó trong ab Phiên bản 2.3 <$ Revision: 655654 $> , vì vậy có lẽ nó đã được thêm vào gần đây.


4
Đối với bất kỳ ai trên máy Mac, rất có thể phiên bản ab của bạn bị tụt lại phía sau và sẽ không mất. Bạn có thể cài đặt từ nguồn hoặc qua homebrew, nhưng "brew install ab" không hoạt động vì đó là một phần của gói apache - bạn có thể cài đặt với "brew install homebrew / apache / ab".
netpoetica

8

Xin lỗi để đánh giá lại một câu hỏi cũ, nhưng đó là câu hỏi đầu tiên xuất hiện trong Google. Đôi khi, lỗi độ dài được báo cáo bởi ab có thể do một vấn đề thực sự gây ra: nếu kết nối bị đóng phía máy chủ trước khi tổng số byte được khai báo trong tiêu đề Độ dài nội dung không được khách hàng nhận được. Điều đó có thể xảy ra nếu có các bên khác giữa máy khách và máy chủ, ví dụ, bộ cân bằng tải thủ công ngây thơ (trường hợp của tôi).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.