2011-02-01 23 views
37

Được rồi, tôi đã tìm kiếm ở khắp mọi nơi và dường như tôi không thể tìm thấy tài nguyên trực tuyến chi tiết về cách diễn giải kết quả từ công cụ đánh giá máy chủ ab của Apache. Tôi đã chạy một số thử nghiệm với những gì tôi nghĩ là các thông số khác nhau đáng kể, nhưng đã thấy kết quả rất giống nhau (tôi có một thời gian khó nghĩ rằng điều này có nghĩa là trang web của tôi đang mở rộng quy mô hoàn hảo!). Nếu có một nguồn tài nguyên chi tiết, ai đó có thể chỉ cho tôi, về cách hiểu kết quả từ bài kiểm tra này, hoặc nếu ai đó cảm thấy thích tạo ra ở đây, tôi nghĩ điều đó sẽ rất hữu ích cho tôi và những người khác.Tôi phải giải thích kết quả từ công cụ đo điểm chuẩn ab của Apache như thế nào?

Trả lời

28

Bực bội, phải không? Tôi đang cố gắng để làm điều tương tự, xem làm thế nào mới được cung cấp và cấu hình máy chủ chuyên dụng của tôi so sánh với những người khác.

Điều tôi sắp làm là so sánh máy chủ sản xuất hiện tại của mình (RAM lõi kép 4GB) với máy chủ mới (RAM lõi tứ 8GB).

Tôi cần 'chơi đẹp' với các so sánh cạnh nhau, vì máy chủ sản xuất hoạt động và tôi không muốn 'ngắt' máy chủ cho người dùng của mình.

So sánh hiện tại vs mới với lệnh sau đây trên một trang php mà chỉ gọi phpinfo(): ab -kc 20 -t 60

Trên máy chủ sản xuất hiện tại của tôi, tôi thấy một cái gì đó như sau, nơi mà nó không thể hoàn thành nhiệm vụ trong số tiền nhất định của thời gian:

Time taken for tests: 60.1234 seconds 
Complete requests: 24538 
Failed requests: 58 
(Connect: 0, Length: 58, Exceptions: 0) 
Requests per second: 408.96 [#/sec] (mean) 
Time per request: 48.905 [ms] (mean) 
Time per request: 2.445 [ms] (mean, across all concurrent requests) 

VS sau trên máy chủ mới hoàn thành tất cả các bài kiểm tra trong một nửa số lượng thời gian:

Time taken for tests: 29.838791 seconds 
Complete requests: 50000 
Failed requests: 11 
(Connect: 0, Length: 11, Exceptions: 0) 
Requests per second: 1675.67 [#/sec] (mean) 
Time per request: 11.936 [ms] (mean) 
Time per request: 0.597 [ms] (mean, across all concurrent requests) 

Bây giờ, đây không thực sự là một thử nghiệm 'công bằng', vì máy chủ hiện tại đang xử lý 20 trang web ngoài kiểm tra điểm chuẩn. Ngoài ra, nó thực sự chỉ là thử nghiệm apache & php.

Đưa bài kiểm tra tương tự này đối với một trong nhiều trang nhà phức hợp của tôi, một trong đó là cảm giác 'chậm trên máy chủ hiện tại, tôi thấy như sau: máy chủ hiện tại:

Time taken for tests: 60.14170 seconds 
Complete requests: 510 
Requests per second: 8.50 [#/sec] (mean) 
Time per request: 2353.497 [ms] (mean) 
Time per request: 117.675 [ms] (mean, across all concurrent requests) 

New Server:

Time taken for tests: 60.18651 seconds 
Complete requests: 1974 
Requests per second: 32.89 [#/sec] (mean) 
Time per request: 608.092 [ms] (mean) 
Time per request: 30.405 [ms] (mean, across all concurrent requests) 

Thử nghiệm này đang tải trang Joomla CMS được tạo động. Nó là một chút nữa của một thử nghiệm 'thế giới thực'. Một lần nữa, với các máy chủ mới không giao dịch với lưu lượng truy cập trang web hiện tại, do đó, nó không phải là một quả táo để so sánh táo. Tôi không muốn thử nghiệm nhiều hơn hoặc tôi có nguy cơ gặp phải trải nghiệm của người dùng cuối trên các trang web của mình.

Sau khi di chuyển trang web sang máy chủ mới, tôi có kế hoạch thực hiện lại các kiểm tra ở trên để tôi có thể thấy điều gì ảnh hưởng đến lưu lượng truy cập trang web thông thường của tôi trên điểm chuẩn. Sản lượng của máy tương tự so với kết quả benchmark chuẩn bị.

Bây giờ, tôi cũng đang xem xét việc nhấn mạnh máy chủ mới và đảm bảo rằng nó phản ứng tốt. Chạy lệnh ab -n 50000 -c 200 tôi xem những top lệnh và nhìn thấy bao nhiêu CPU & bộ nhớ đang được sử dụng đồng thời * f5 * ing trang trong trình duyệt của tôi để xem nếu tôi nhận được bất kỳ các lỗi và cũng để có được cảm giác về thời gian máy chủ phản hồi.

thử nghiệm đầu tiên của tôi đã cho tôi:

Concurrency Level: 200 
Time taken for tests: 692.160011 seconds 
Complete requests: 50000 
Failed requests: 30102 
(Connect: 0, Length: 30102, Exceptions: 0) 
Write errors: 0 
Non-2xx responses: 30102 
Total transferred: 456568770 bytes 
HTML transferred: 442928962 bytes 
Requests per second: 72.24 [#/sec] (mean) 
Time per request: 2768.640 [ms] (mean) 
Time per request: 13.843 [ms] (mean, across all concurrent requests) 
Transfer rate: 644.17 [Kbytes/sec] received 

Lưu ý tỷ lệ yêu cầu không thành rất cao. Apache của tôi được đặt ở mức tối đa là 250 yêu cầu đồng thời, nhưng MySQL của tôi chỉ ở mức 175. MySQL là điểm thất bại ở đây. Nó không thể xử lý tất cả các yêu cầu đến từ apache. Tải trang trình duyệt web của tôi đã cho tôi trang lỗi kết nối MySQL trên nhiều lần làm mới trang. Vì vậy, tôi đã tăng MySQL lên 300 yêu cầu đồng thời (tôi đã thực hiện nó rồi, nhưng đã quên khởi động lại MySQL, vì vậy đây là một thử nghiệm tốt - tôi đã xác định một thay đổi cần thiết, và vô tình làm một thực nghiệm kiểm tra xác nhận sự cần thiết của sự thay đổi).

Các hoạt động tiếp theo đã cho tôi kết quả như sau:

Concurrency Level:  200 
Time taken for tests: 1399.999463 seconds 
Complete requests:  50000 
Failed requests:  5054 
    (Connect: 0, Length: 5054, Exceptions: 0) 
Write errors:   0 
Non-2xx responses:  5054 
Total transferred:  1016767290 bytes 
HTML transferred:  995713274 bytes 
Requests per second: 35.71 [#/sec] (mean) 
Time per request:  5599.998 [ms] (mean) 
Time per request:  28.000 [ms] (mean, across all concurrent requests) 
Transfer rate:   709.24 [Kbytes/sec] received 

này đã tiếp quản gấp đôi thời gian, nhưng tỷ lệ thất bại yêu cầu đã được nhiều thấp hơn nhiều. Về cơ bản, máy chủ hiện được định cấu hình để có thể xử lý ít nhất 200 lượt xem trang đồng thời của một trong những trang chủ của trang web của tôi, nhưng sẽ mất 5 giây một trang để phân phối chúng. Không tốt, nhưng tốt hơn nhiều so với các lỗi MySQL mà tôi đã nhận được trước đó.

Trong tất cả điều này, việc sử dụng CPU máy chủ của tôi đang cố định ở mức 100% với 'trung bình tải' lơ lửng lên trên 180. MySQL đang sử dụng khoảng 8-9% CPU và không sử dụng nhiều RAM đã bỏ qua nó, vì tôi chỉ liên tục đập cùng một trang, vì vậy nó chỉ xử lý một cơ sở dữ liệu duy nhất. 400MB của 4GB + nó được cấu hình để phát triển thành. đầu cho thấy bộ đệm và sử dụng bộ nhớ cache vào khoảng 50% tổng số RAM có sẵn. Vì vậy, trong khi tôi tải máy lên với thử nghiệm này, nó không nhận được gần điểm quá tải. Theo một cách sử dụng cơ sở dữ liệu thế giới thực, MySQL nên lấy phần lớn bộ nhớ mà tôi đã bỏ qua nó, do đó, máy chủ nên được khá gần với tải đầy đủ tại thời điểm đó.

thử nghiệm tiếp theo của tôi là để kiểm tra apache tại 'đầy tải' 250 kết nối ab -n 50000 -c 250

Concurrency Level:  250 
Time taken for tests: 1442.515514 seconds 
Complete requests:  50000 
Failed requests:  3509 
    (Connect: 0, Length: 3509, Exceptions: 0) 
Write errors:   0 
Non-2xx responses:  3509 
Total transferred:  1051321215 bytes 
HTML transferred:  1029809879 bytes 
Requests per second: 34.66 [#/sec] (mean) 
Time per request:  7212.577 [ms] (mean) 
Time per request:  28.850 [ms] (mean, across all concurrent requests) 
Transfer rate:   711.73 [Kbytes/sec] received 

này đang hiển thị kết quả tương tự để kiểm tra kết nối 200 với MySQL thích nắp kết nối. Điều này là tốt với tôi tôi nghĩ. Tôi không thích những 7 giây để trả lại một trang, nhưng tôi nghĩ rằng tôi có thể cải thiện mà ở cấp Joomla bằng cách cho phép cacheing trong Joomla hoặc với APC hoặc Memcache đó đều được cài đặt nhưng không được sử dụng bởi Joomla được nêu ra.

Đang cố gắng để đẩy may mắn của tôi, tôi nghĩ rằng tôi sẽ cố gắng 300 kết nối đồng thời. ab -n 50000 -c 300 Trình duyệt cho thấy một chờ đợi lâu dài cho một tải trang nhanh chóng. Nếu không, không thực sự thay đổi nhiều trong kết quả.

Concurrency Level:  300 
Time taken for tests: 1478.35890 seconds 
Complete requests:  50000 
Failed requests:  2266 
    (Connect: 0, Length: 2266, Exceptions: 0) 
Write errors:   0 
Non-2xx responses:  2266 
Total transferred:  1079120910 bytes 
HTML transferred:  1057241646 bytes 
Requests per second: 33.83 [#/sec] (mean) 
Time per request:  8868.215 [ms] (mean) 
Time per request:  29.561 [ms] (mean, across all concurrent requests) 
Transfer rate:   712.99 [Kbytes/sec] received 

Tôi không biết liệu diễn giải của tôi có là 'đúng' hay không.

Tôi vừa sử dụng kết quả để đảm bảo rằng tôi có tỷ lệ phản hồi tốt - thiếu tỷ lệ phản hồi hoàn hảo, nhưng tôi không biết cách xem hoặc tái tạo các lỗi trong cách tôi có thể kiểm tra chúng .

Thời gian chậm theo yêu cầu cũng liên quan đến tôi, nhưng tôi nghĩ rằng tôi có thể giải quyết nhiều về điều đó ở lớp ứng dụng.

tôi tin tưởng rằng trong khi các máy chủ sẽ làm chậm như rùa bò, nó có thể xử lý một tình huống tải nặng.

Nhìn vào các công cụ điều chỉnh hiệu suất khác như MonYog sau khi các kiểm tra đo điểm chuẩn này cũng cho tôi thấy rằng cấu hình hiện tại của tôi là 'đủ tốt'.

Tôi muốn có một nơi mà mọi người đã đăng kết quả kiểm tra tôi có thể tái tạo với phần mô tả phần cứng và cấu hình phần mềm để tôi biết nếu tôi 'cạnh tranh' hoặc nếu tôi có nhiều việc phải làm thiết bị của tôi. Vì vậy, tại sao tôi đăng kết quả của mình.

+2

Tôi nghĩ bạn có thể hiểu sai dòng yêu cầu không thành công, xem thêm câu trả lời của tôi. – amarillion

+0

Cảm ơn bạn đã giải thích amarillion – creuzerm

+0

bạn đang thử nghiệm ab trên máy cục bộ? Tức là - bạn đang làm AB trên cùng một máy nơi máy chủ web. Tôi chỉ nhận được hơn 1k yêu cầu mỗi giây khi tôi thực hiện chuẩn apache trên máy tính của riêng mình. – David

8

Xin lưu ý rằng đối với dòng "yêu cầu không thành công", yêu cầu không thành công được xác định bằng cách so sánh độ dài yêu cầu tiếp theo với nhau. Đối với trang web động, điều này không có nghĩa là yêu cầu không thành công! Vì vậy, đừng lo lắng về dòng yêu cầu không thành công.

Xem thêm: http://www.celebrazio.net/tech/unix/apache_bench.html

1

Trên một mặt lưu ý, AB là đơn luồng (đó là OK cho CPU đơn lõi cũ như Pentium 2001 4).

Để kiểm tra CPU đa nhân đang lưu trữ máy chủ Web (Nginx/Lighty sử dụng một số quy trình, Apache sử dụng một số luồng), bạn nên sử dụng Weighttp (tương thích với AB).

"Weighttp -t 6" sẽ chạy 6 chuỗi máy khách (ngược lại "AB -t 6" sẽ chạy thử nghiệm 6 giây).

Bạn sẽ nhận được nhiều kết quả liên quan hơn bằng cách sử dụng một số luồng máy khách (nhiều như số lượng nhân viên máy chủ Web - mà phải khớp với số lượng lõi CPU của hộp máy chủ).

+5

ab cho phép bạn chỉ định mức độ tương tranh. Tôi nghĩ điều này có nghĩa là nó đa luồng, theo nghĩa bạn đang sử dụng ở đây. Ví dụ. ab -n 1000 -c 10 http: // myserver/ sẽ chạy 100 yêu cầu từ 10 người yêu cầu đồng thời, tổng cộng 1.000 lượt truy cập. –

1
Time per request:  7.303 [ms] (mean) 
Time per request:  0.730 [ms] (mean, across all concurrent requests) 

người đầu tiên có liên quan đến thời gian trung bình cho yêu cầu mỗi người dùng đồng thời vì vậy nếu bạn đang thực hiện thử nghiệm cho 1000 yêu cầu và 200 người dùng đồng thời, thì người đầu tiên sẽ là thời gian trung bình cho mỗi yêu cầu 200. tùy chọn thứ hai liên quan đến thời gian yêu cầu tổng thể là thời gian trung bình trên toàn bộ 1000 yêu cầu

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