2010-11-03 26 views
7

Tôi đã thực hiện một số thử nghiệm bằng cách sử dụng Apache Bench để cấu hình thời gian phản hồi mã của tôi và nó không tạo ra đúng loại dữ liệu cho tôi. Tôi hy vọng những người tốt ở đây có ý tưởng.Các giải pháp thay thế cho ApacheBench để lược tả tốc độ mã của tôi

Cụ thể, tôi cần một công cụ mà

  • Liệu các yêu cầu HTTP qua mạng (nó không cần phải làm gì rất lạ mắt)
  • ghi thời gian đáp ứng càng chính xác càng tốt (ít nhất là đến một vài mili giây)
  • Ghi dữ liệu thời gian đáp ứng vào một tập tin mà không cần chế biến thêm (hoặc cung cấp nó cho mã của tôi, nếu một thư viện)

tôi biết về ab -e, in dữ liệu vào một tập tin. Vấn đề là điều này chỉ in các dữ liệu định lượng, đó là hữu ích, nhưng không phải những gì tôi cần. Tùy chọn ab -g sẽ hoạt động, ngoại trừ việc nó không in dữ liệu phụ thứ hai, có nghĩa là tôi không có độ phân giải mà tôi cần.

Tôi đã viết một vài dòng Python để làm điều đó, nhưng httplib là khủng khiếp không hiệu quả và do đó kết quả là vô ích. Nói chung, tôi cần độ chính xác tốt hơn so với Python thuần túy có khả năng cung cấp. Nếu bất cứ ai có gợi ý cho một thư viện có thể sử dụng được từ Python, tôi là tất cả các tai.

Tôi cần một thứ có hiệu suất cao, có thể lặp lại và đáng tin cậy.

Tôi biết rằng một nửa số câu trả lời của tôi sẽ nằm dọc theo các dòng "độ trễ của Internet khiến các phép đo chi tiết đó vô nghĩa." Trong trường hợp sử dụng cụ thể của tôi, điều này không đúng. Tôi cần chi tiết thời gian có độ phân giải cao. Một cái gì đó thực sự sử dụng phần cứng HPET của tôi sẽ là tuyệt vời.

Ném tiền thưởng vào đây do số lượng câu trả lời và lượt xem thấp.

+1

Tôi đã kết thúc việc xây dựng một công cụ tùy chỉnh để thực hiện phép đo của mình bằng cách kết hợp Python và libcurl. libcurl cung cấp các phép đo thời gian phân giải tốt cho từng phần của quy trình yêu cầu/phản hồi http, cho phép tôi có được các phép đo chính xác mà tôi cần. –

Trả lời

1

Tôi đã thực hiện việc này theo hai cách.

Với "loadrunner" là một sản phẩm tuyệt vời nhưng khá đắt tiền (từ tôi nghĩ HP những ngày này).

Với kết hợp perl/php và gói Curl. Tôi tìm thấy api CURL hơi dễ sử dụng hơn từ php. Nó khá dễ dàng để cuộn yêu cầu GET và PUT của riêng bạn. Tôi cũng khuyên bạn nên chạy thủ công thông qua một số yêu cầu mẫu với Firefox và LiveHttpHeaders thêm vào để nắm bắt định dạng chính xác của các yêu cầu http mà bạn cần.

+0

Loadrunner nghe như một phần mềm tuyệt vời. Chắc chắn ngoài ngân sách của tôi (và quá mức cần thiết - tôi thực sự chủ yếu làm thống kê ở đây). Tôi thực sự chỉ cần thực hiện các yêu cầu HEAD, nhưng ý tưởng sử dụng curl như một thư viện có vẻ giống như một thư viện tốt. –

+0

Bạn có biết nếu curl có thể được thuyết phục để làm thời gian cho các phiên còn sống? –

+0

Chỉ cần theo dõi ở đây - Curl (libcurl trong Python, thực sự) đã cung cấp rất nhiều thông tin có liên quan trực tiếp đến những điểm tôi muốn điều tra. Tôi đoán việc xây dựng các công cụ của riêng mình cho vấn đề của riêng tôi thực sự là câu trả lời đúng đôi khi. Như một phần thưởng, libcurl hiệu quả hơn rất nhiều so với bất kỳ mã mạng nào mà tôi có thể tự viết. –

1

JMeter khá tiện dụng. Nó có một GUI mà từ đó bạn có thể thiết lập các yêu cầu và threadpool của bạn và nó cũng có thể được chạy từ dòng lệnh.

+0

Điều đó trông giống như một công cụ hữu ích. Một chút overkill cho những gì tôi cần ở đây, nhưng tôi sẽ giữ nó trong tâm trí cho các dự án khác. Nó chính xác đến mức nào? Mối quan tâm của tôi với các công cụ lớn hơn như vậy là GUI và tất cả "các thứ khác" có thể thêm nhiễu vào kết quả của tôi (Cấp, tôi đang tìm kết quả chính xác hơn hầu hết các công cụ đo điểm chuẩn web được thiết kế để cung cấp). –

+0

Về tính chính xác - thực hiện một thử nghiệm chạy với ApacheBench (hoặc bất kỳ điều gì bạn tin tưởng) và một thử nghiệm khác với JMeter. Nếu máy chủ của bạn có hiệu suất nhất quán, bạn sẽ nhận được kết quả gần gũi từ cả hai lần chạy. Bằng cách này bạn có thể đảm bảo nếu có bất kỳ chi phí GUI nào. – mindas

+0

@mindas Tôi cần độ chính xác lớn hơn nhiều so với thử nghiệm như vậy sẽ tiết lộ. –

1

Nếu bạn có thể viết mã bằng Java, bạn có thể xem kết hợp của JUnitPerf + HttpUnit.

Nhược điểm là bạn sẽ phải tự mình làm nhiều việc hơn. Nhưng ở mức giá này, bạn sẽ nhận được sự linh hoạt không giới hạn và có thể cho là chính xác hơn so với các công cụ GUI, chưa kể đến phân tích HTML, thực thi JavaScript, v.v. nhưng tôi không có kinh nghiệm với nó.

+0

Vâng ... nhưng tôi không cần phân tích cú pháp HTML, javascript, v.v. Tôi chỉ cần thời gian để yêu cầu rời khỏi máy của tôi và để tôi bắt đầu yêu cầu HEAD trở lại. JUnitPerf có lẽ cao hơn một chút so với tôi cần, nhưng tôi sẽ xem xét nó. –

+0

Tôi đã xem The Grinder. Nó có vẻ gần gũi hơn với những gì tôi đang tìm kiếm, nhưng vẫn có một số sự thiếu hiệu quả khiến tôi lo lắng. Ví dụ, "HTTPClient gửi POST như hai PDUs ... Đây là hậu quả của việc thực hiện bảo thủ đường ống HTTP/1.1 trong HTTPClient." –

0

Tôi đã sử dụng một kịch bản để lái xe 10 hộp trên cùng một switch để tạo tải bằng cách "phát lại" yêu cầu tới 1 máy chủ. Tôi đã có thời gian phản hồi ghi nhật ký ứng dụng web (chỉ dành cho máy chủ) cho mức độ chi tiết mà tôi cần, nhưng tôi không quan tâm đến thời gian phản hồi cho khách hàng. Tôi không chắc chắn bạn quan tâm để bao gồm các chuyến đi đến và từ khách hàng trong tính toán của bạn, nhưng nếu bạn đã làm nó không phải là khó khăn để mã hóa. Sau đó, tôi xử lý nhật ký của mình bằng tập lệnh trích xuất thời gian trên mỗi url và biểu đồ đồ thị phân tán và đồ thị xu hướng dựa trên tải.

này đáp ứng yêu cầu của tôi mà là:

  • phân phối Bất động thế giới của các cuộc gọi đến các url khác nhau.
  • Hiệu suất xu hướng dựa trên tải.
  • Không ảnh hưởng đến ứng dụng web bằng cách chạy các ops chuyên sâu khác trên cùng một hộp.

Tôi đã làm bộ điều khiển dưới dạng tập lệnh shell mà máy chủ foreach bắt đầu một quá trình trong nền để lặp qua tất cả các url trong một tệp gọi curl trên mỗi url. Tôi đã viết bộ xử lý nhật ký trong Perl vì tôi đã làm nhiều Perl hơn vào lúc đó.

1

httperf rất mạnh mẽ.

+0

Ông bao gồm phần thiết yếu - tên của công cụ. – mmlac

Các vấn đề liên quan