2012-04-21 17 views
28

Tôi bắt đầu viết một số bài kiểm tra cơ bản trong JMeter và ngạc nhiên rằng các phép đo rất khác so với các phép đo từ Apache ab.Được phép đo, JMeter hoặc Apache ab?

Tôi có mạng LAN gigabit kết nối máy chủ Intel i7 chạy Nginx và máy kiểm tra i5 chạy JMeter hoặc ab. Ban đầu, tôi chỉ đơn giản là kiểm tra tốc độ phản hồi của trang chủ Nginx.

ab -c 1 -n 100 http://testserver.local/ 

cho

Document Path:  /
Document Length:  151 bytes 

Concurrency Level:  1 
Time taken for tests: 0.078 seconds 
Complete requests:  100 
Failed requests:  0 
Write errors:   0 
Total transferred:  38400 bytes 
HTML transferred:  15100 bytes 
Requests per second: 1280.77 [#/sec] (mean) 
Time per request:  0.781 [ms] (mean) 
Time per request:  0.781 [ms] (mean, across all concurrent requests) 
Transfer rate:   480.29 [Kbytes/sec] received 

Kết quả này một cách nhất quán tái sản xuất, +/- vài phần trăm.


Trong JMeter, tôi có 1 người sử dụng 100-loop thread group chứa:

  • một tiêu đề quản lý HTTP thiết Accept-Encoding: gzip
  • một HTTP GET/sampler
  • người nghe báo cáo tóm tắt

Chỉ với 100 mẫu, điều này cho phép cực kỳ kết quả không nhất quán mỗi khi tôi chạy nó. Nhưng thực tế đáng ngạc nhiên nhất là thông lượng được báo cáo thấp tới 40 yêu cầu mỗi giây (không phải 1280). Tỷ lệ ghi nhận cao nhất là 1030, và điều này chỉ đạt được khi tôi tăng lên 10.000 mẫu.

Tôi có nghĩ rằng JMeter là công cụ sai cho các thử nghiệm tải đơn giản vì chi phí của nó quá cao để cho phép đo chính xác?

+1

+1, tuy nhiên tôi nghĩ kết luận của bạn là chính xác. –

Trả lời

48

Jmeter cho bạn biết mỗi lần yêu cầu thực sự là mất bao lâu. AB chỉ thực hiện một số phép toán cơ bản để đạt được mức trung bình tổng thể. Vì vậy, câu trả lời trực tiếp cho câu hỏi của bạn là jmeter làm cho nó đúng và ab chỉ làm cho một dự đoán thô bằng cách cho bạn ý nghĩa trên tất cả mọi thứ.

Nhưng, chắc chắn, nếu bạn đặt hai công cụ cạnh nhau và xếp hạng chúng cho tốc độ thì rõ ràng là trường hợp ab sẽ thực hiện jmeter. Jmeter chỉ làm được nhiều hơn, nó ghi lại nhiều dữ liệu hơn và đang xử lý nhiều logic hơn nên mất nhiều thời gian hơn để quay lại một yêu cầu duy nhất. Thực tế đơn giản là Jmeter là một công cụ kiểm tra tải đầy đủ tính năng, AB là, tốt, không.

Điều này là nhằm mục đích thử nghiệm tải tải không phải là đứa trẻ nhanh nhất trên khối, thay vào đó là về việc có thể xây dựng đại diện thực tế về loại tải ứng dụng của bạn khi nó phát trực tiếp. Trong khía cạnh này, jmeter thắng tay xuống, vì vậy nó thực sự phụ thuộc vào yêu cầu của bạn là gì. Nếu bạn chỉ muốn tạo ra càng nhiều yêu cầu càng tốt bằng cách sử dụng số lượng phần cứng ít nhất thì ab là một lựa chọn tốt nhưng nếu bạn muốn xây dựng một bài kiểm tra đại diện, với các hành trình giao dịch, logic điều kiện và tất cả các công cụ hữu ích khác, thì jmeter là con đường để đi. Hãy nghĩ về nó như thế này: chúng là cả hai dự án Apache nhưng AB, tôi nghĩ, được thiết kế để kiểm tra máy chủ web apache, JMeter, tuy nhiên, được thiết kế để kiểm tra Tomcat.

Bây giờ, tôi đoán rằng jmeter đã tạo ra kết quả không nhất quán vì nó đã đạt đến giới hạn trên máy mà nó đang chạy. Tôi cá là bạn đang chạy ở chế độ GUI và có ít nhất một người nghe đang hoạt động, như thế này bạn đang yêu cầu công cụ thực hiện rất nhiều. Nếu bạn cần một tỷ lệ cao các yêu cầu thì Jmeter có một chế độ gọn gàng và trung bình.Thông thường, đối với khối lượng lớn, thực hành tốt nhất là thực hiện các kiểm tra tại dòng lệnh với rất ít người nghe; có rất nhiều thông tin về chủ đề này trên trang web apache jmeter. Một điểm khác bạn nên xem xét, nếu bạn đang thực sự tham gia thử nghiệm tải, là để thực sự có được lợi ích từ loại điều này, trước tiên bạn cần quyết định loại tải mình cần trang web của mình để hỗ trợ và chỉ sau đó bạn nên thiết kế một thử nghiệm đại diện cho điều này. Điều này đạt được bằng cách sử dụng nhịp độ và thời gian chờ mô phỏng. Các vấn đề với nói một sợi đó là nên chỉ cần đi và chạy nhanh như nó có thể có thể là nó sẽ lặp lại nhanh như điều kiện địa phương của nó cho phép nó, nhưng sẽ có luôn luôn là một cái gì đó mà đặt phá vỡ trên, thậm chí ab bị giới hạn; dù công cụ có trọng lượng nhẹ đến mức nào thì vẫn còn một cái gì đó. Nhưng nếu bạn tăng tốc yêu cầu của mình thì bạn sẽ loại bỏ vấn đề này và nhận thêm phần thưởng bổ sung mà bạn kết thúc với sự thống nhất giữa các lần chạy và giữa các mã, vì vậy ngay cả khi máy chủ của bạn tăng tốc hoặc chậm lại (với các thay đổi đối với cơ sở mã) thử nghiệm của bạn sẽ vẫn thực hiện cùng một tỷ lệ yêu cầu - điều này khá hữu ích cho điểm chuẩn.

Nếu bạn muốn dùng JMeter hơn nữa thì hãy xem Đồng hồ đếm thông lượng không đổi và sau đó sử dụng nhiều luồng để tạo mức lưu lượng truy cập bạn cần đại diện.

+0

ApacheBench (mà tôi đồng ý chỉ là "toán cơ bản") có thể tạo ra ít dữ liệu hơn, nhưng điều đó có nghĩa là nó không có khả năng tính toán giá trị trung bình một cách chính xác. OP báo cáo trung bình khoảng 1280 yêu cầu mỗi giây với 'ab'. Cao nhất anh ta báo cáo từ JMeter là 1030. Trong khi tôi đồng ý với những lợi ích khác nhau mà bạn liệt kê về JMeter, tôi không thể bỏ qua sự thật rõ ràng rằng JMeter không làm bão hòa máy chủ web nhiều như ApacheBench. Vì lý do này, tôi thấy khẳng định của bạn rằng "jmeter làm cho nó đúng" đáng ngờ. Nếu JMeter đã đúng, nó phải tạo ra ít nhất một giá trị trung bình. –

+0

Hey Tom, thực sự tôi chưa bao giờ nói giá trị trung bình từ ab là không chính xác, chỉ là nó chỉ là vậy, giá trị trung bình của toán học, và không phải chi tiết hơn về kết quả như JMeter đưa ra. Re. các điểm khác của bạn về những người có thể tạo ra nhiều yêu cầu nhất mỗi giây, tôi có thể giới thiệu bạn đến đoạn thứ 3 về đứa trẻ nhanh nhất trong khối hay không, nhưng về cơ bản thì OP bị nhầm lẫn vì anh ta không tính đến giới hạn phần cứng thử nghiệm của mình. Cảm ơn. Oliver –

3

Trong thiết lập của bạn, JMeter tự bão hòa nhanh hơn nó có thể làm bão hòa máy chủ web của bạn.

Bạn đang chạy một máy chủ web C rất được tối ưu hóa trên phần cứng và băng ghế dự bị-đánh dấu nó với ứng dụng Java tương đối nặng trên phần cứng ít hơn. Mã máy C được tối ưu hóa (có thể) luôn luôn nhanh hơn mã bytecode Java. JMeter không thể theo kịp Nginx và do đó cho bạn kết quả lạ khi nó chạm đến giới hạn phần cứng. Java thực hiện rất nhiều điều tốt đẹp trong nền quản lý tài nguyên phần cứng, nhưng cũng tạo ra hành vi không thể đoán trước khi sử dụng tài nguyên cực đoan. ApacheBench, mặt khác, là một chương trình C đủ ánh sáng để nó có thể bão hòa máy chủ và có thể tạo ra các kết quả nhất quán bởi vì nó có dung lượng dư thừa sau khi bão hòa máy chủ web của bạn.

JMeter là công cụ tuyệt vời cho các ứng dụng năng động nặng đánh dấu băng ghế dự bị cần một thời gian để xử lý yêu cầu. Tất cả dữ liệu bổ sung mà nó cung cấp đều giúp ích cho các ứng dụng web như vậy. Khi bạn đang xử lý việc phân phát tệp tĩnh (chỉ là về điều nhanh nhất mà máy chủ web có thể thực hiện) trên các máy chủ web được tối ưu hóa cao, bạn cần một công cụ đủ nhanh để theo kịp.

0

Như đã nêu trong câu trả lời đầu tiên, từ khóa "yêu cầu". JMeter là lựa chọn tốt hơn để kiểm tra máy chủ phục vụ các trang web. Ví dụ, nó có thể gửi chuỗi các yêu cầu, tạo ra yêu cầu differet cho mỗi chuỗi, phân tích phản hồi HTML và tải nội dung của hình ảnh và tập lệnh từ HTML. AB là lựa chọn tốt hơn cho thử nghiệm REST API, nơi bạn cần máy chủ đó phản hồi nhanh nhất có thể và phục vụ càng nhiều yêu cầu càng tốt, không có kết nối giữa hai yêu cầu liên tục và v.v. Vì vậy, AB thực sự có thể tạo nhiều yêu cầu hơn JMeter so với cùng một máy chủ từ cùng một máy khách.