kiểm tra tải ab


193

Ai đó có thể vui lòng hướng dẫn tôi qua quy trình làm thế nào tôi có thể tải thử nghiệm trang web của mình bằng công cụ băng ghế dự bị apache ( ab) không?

Tôi muốn biết như sau:

Trang web có thể xử lý bao nhiêu người mỗi phút?

Xin vui lòng dẫn tôi qua các lệnh tôi nên chạy để tìm ra điều này.

Tôi đã thử mọi hướng dẫn, và chúng khó hiểu.

Câu trả lời:


313

Công cụ điểm chuẩn apache là rất cơ bản, và mặc dù nó sẽ cho bạn ý tưởng vững chắc về hiệu suất, nhưng sẽ chỉ phụ thuộc vào nó nếu bạn có kế hoạch khiến trang web của bạn bị căng thẳng nghiêm trọng trong sản xuất.

Phải nói rằng, đây là thông số phổ biến nhất và đơn giản nhất:

-c: ("Đồng thời"). Cho biết có bao nhiêu khách hàng (người / người dùng) sẽ truy cập trang web cùng một lúc. Trong khi abchạy, sẽ có -ckhách hàng nhấn trang web. Đây là những gì thực sự quyết định mức độ căng thẳng mà trang web của bạn sẽ phải chịu trong thời gian chuẩn.

-n: Cho biết có bao nhiêu yêu cầu sẽ được thực hiện. Điều này chỉ quyết định độ dài của điểm chuẩn. -nGiá trị cao với -cgiá trị mà máy chủ của bạn có thể hỗ trợ là một ý tưởng tốt để đảm bảo rằng mọi thứ không bị phá vỡ dưới áp lực kéo dài: không giống nhau để hỗ trợ căng thẳng trong 5 giây so với 5 giờ.

-k: Điều này thực hiện các trình duyệt funcionality "KeepAlive" thực hiện. Bạn không cần phải vượt qua một giá trị -kvì nó là "boolean" (có nghĩa là: nó cho biết rằng bạn muốn thử nghiệm của mình để sử dụng tiêu đề Keep Alive từ HTTP và duy trì kết nối). Vì các trình duyệt làm điều này và bạn có thể muốn mô phỏng sự căng thẳng và dòng chảy mà trang web của bạn sẽ có từ các trình duyệt, bạn nên thực hiện một điểm chuẩn với điều này.

Đối số cuối cùng chỉ đơn giản là máy chủ lưu trữ. Theo mặc định, nó sẽ đạt giao thức http: // nếu bạn không chỉ định nó.

ab -k -c 350 -n 20000 example.com/

Bằng cách ban hành lệnh trên, bạn sẽ nhấn http://example.com/ với 350 kết nối đồng thời cho đến khi 20 nghìn yêu cầu được đáp ứng. Nó sẽ được thực hiện bằng cách sử dụng tiêu đề giữ sống.

Sau khi quá trình hoàn thành 20 nghìn yêu cầu, bạn sẽ nhận được phản hồi về số liệu thống kê. Điều này sẽ cho bạn biết trang web hoạt động tốt như thế nào dưới sự căng thẳng mà bạn đặt nó khi sử dụng các tham số ở trên.

Để tìm hiểu có bao nhiêu người mà trang web có thể xử lý cùng một lúc, chỉ cần xem thời gian phản hồi (có nghĩa là thời gian phản hồi tối thiểu và tối đa, yêu cầu không thành công, v.v.) là những con số mà trang web của bạn có thể chấp nhận (các trang web khác nhau có thể muốn tốc độ khác nhau). Bạn có thể chạy công cụ với các giá trị -c khác nhau cho đến khi bạn đạt đến điểm bạn nói "Nếu tôi tăng nó, nó sẽ bắt đầu nhận được các yêu cầu thất bại và nó bị hỏng".

Tùy thuộc vào trang web của bạn, bạn sẽ mong đợi số lượng yêu cầu trung bình mỗi phút. Điều này thay đổi rất nhiều, bạn sẽ không thể mô phỏng điều này với ab. Tuy nhiên, hãy nghĩ về nó theo cách này: Nếu người dùng trung bình của bạn sẽ đạt 5 yêu cầu mỗi phút và thời gian phản hồi trung bình mà bạn thấy hợp lệ là 2 giây, điều đó có nghĩa là 10 giây trong 1 phút người dùng sẽ chỉ nhận được yêu cầu, nghĩa là chỉ 1/6 thời gian nó sẽ được nhấn trang web. Điều này cũng có nghĩa là nếu bạn có 6 người dùng truy cập trang web cùng lúc với ab, bạn có thể có 36 người dùng trong mô phỏng, mặc dù mức độ đồng thời (-c) của bạn chỉ là 6.

Điều này phụ thuộc vào hành vi bạn mong đợi từ người dùng của bạn khi sử dụng trang web, nhưng bạn có thể nhận được từ "Tôi hy vọng người dùng của mình đạt được yêu cầu X mỗi phút và tôi coi thời gian phản hồi trung bình là hợp lệ nếu là 2 giây". Sau đó, chỉ cần sửa đổi cấp độ -c của bạn cho đến khi bạn đạt 2 giây thời gian phản hồi trung bình (nhưng đảm bảo thời gian phản hồi tối đa và stddev vẫn hợp lệ) và xem bạn có thể tạo ra mức độ lớn như thế nào.

Tôi hy vọng tôi đã giải thích điều này rõ ràng :) Chúc may mắn


5
Câu trả lời thẳng thắn và rõ ràng! Bạn có thể vui lòng giải thích thêm một chút về lý do tại sao bạn nhận được điều này "Điều này cũng có nghĩa là nếu bạn có 6 người dùng truy cập trang web cùng lúc với ab, bạn có thể có 36 người dùng trong mô phỏng, mặc dù mức độ đồng thời (-c) của bạn chỉ là 6. "
kbariotis

3
Xin nhắc lại, có lẽ bạn muốn thêm -ltùy chọn nếu trang có nội dung động, theo cách đó bạn không nhận được một loạt các yêu cầu thất bại do độ dài nội dung khác nhau giữa các yêu cầu.
JCM

73

Xin vui lòng dẫn tôi qua các lệnh tôi nên chạy để tìm ra điều này.

Thử nghiệm đơn giản nhất bạn có thể làm là thực hiện 1000 yêu cầu, 10 yêu cầu cùng một lúc (trong đó mô phỏng khoảng 10 người dùng đồng thời nhận được 100 trang mỗi trang - trong suốt thời gian thử nghiệm).

ab -n 1000 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://www.example.com/

-n 1000 là số lượng yêu cầu để thực hiện.

-c 10 yêu cầu AB thực hiện 10 yêu cầu cùng một lúc, thay vì 1 yêu cầu tại một thời điểm, để mô phỏng tốt hơn các khách truy cập đồng thời (so với khách truy cập tuần tự).

-kgửi KeepAlivetiêu đề, yêu cầu máy chủ web không tắt kết nối sau khi mỗi yêu cầu được thực hiện mà thay vào đó tiếp tục sử dụng lại nó.

Tôi cũng đang gửi tiêu đề bổ sung Accept-Encoding: gzip, deflatevì mod_deflate hầu như luôn được sử dụng để nén đầu ra văn bản / html 25% -75% - những ảnh hưởng không nên bị loại bỏ do ảnh hưởng đến hiệu suất chung của máy chủ web (nghĩa là, có thể chuyển gấp 2 lần dữ liệu trong cùng một khoảng thời gian, v.v.).

Các kết quả:

Benchmarking www.example.com (be patient)
Completed 100 requests
...
Finished 1000 requests


Server Software:        Apache/2.4.10
Server Hostname:        www.example.com
Server Port:            80

Document Path:          /
Document Length:        428 bytes

Concurrency Level:      10
Time taken for tests:   1.420 seconds
Complete requests:      1000
Failed requests:        0
Keep-Alive requests:    995
Total transferred:      723778 bytes
HTML transferred:       428000 bytes
Requests per second:    704.23 [#/sec] (mean)
Time per request:       14.200 [ms] (mean)
Time per request:       1.420 [ms] (mean, across all concurrent requests)
Transfer rate:          497.76 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       1
Processing:     5   14   7.5     12      77
Waiting:        5   14   7.5     12      77
Total:          5   14   7.5     12      77

Percentage of the requests served within a certain time (ms)
  50%     12
  66%     14
  75%     15
  80%     16
  90%     24
  95%     29
  98%     36
  99%     41
 100%     77 (longest request)

Để giải thích đơn giản nhất, bỏ qua mọi thứ NHƯNG dòng này:

Requests per second:    704.23 [#/sec] (mean)

Nhân số đó với 60 và bạn có yêu cầu của mình mỗi phút.

Để có kết quả trong thế giới thực, bạn sẽ muốn kiểm tra Wordpress thay vì một số tệp HTML hoặc index.php tĩnh vì bạn cần biết mọi thứ hoạt động như thế nào: bao gồm mã PHP phức tạp và nhiều truy vấn MySQL ...

Ví dụ, đây là kết quả của việc thử nghiệm bản cài đặt Wordpress mới trên cùng hệ thống và môi trường WAMP (Tôi đang sử dụng WampDeveloper, nhưng cũng có Xampp, WampServer và những người khác) ...

Requests per second:    18.68 [#/sec] (mean)

Bây giờ chậm hơn 37 lần!

Sau khi kiểm tra tải, có một số điều bạn có thể làm để cải thiện hiệu suất tổng thể (Yêu cầu mỗi giây) và cũng làm cho máy chủ web ổn định hơn dưới tải lớn hơn (ví dụ: tăng -n-ccó xu hướng sụp đổ Apache), đó là bạn có thể đọc về đây:

Tải thử nghiệm Apache với AB (Apache Bench)


9

Các bước để thiết lập Apache Bench (AB) trên windows (IMO - Được khuyến nghị).

Bước 1 - Cài đặt Xampp.
Bước 2 - Mở CMD.
Bước 3 - Đi đến đích băng ghế dự bị ( cd C:\xampp\apache\bin) từ CMD
Bước 4 - Dán lệnh ( ab -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://localhost:yourport/)
Bước 5 - Đợi nó. Bạn đã hoàn tất


Nó không hoạt động ... Tôi đang gặp lỗi này: Điểm chuẩn localhost (hãy kiên nhẫn) ... apr_socket_recv: Kết nối bị từ chối (111)
Vijaysinh Parmar

thay thế localhost bằng 127.0.0.1
akshaynagpal

3

Tôi cũng tò mò liệu tôi có thể đo tốc độ của tập lệnh của mình bằng abs apache hoặc tập lệnh đo php xây dựng / phá hủy hoặc phần mở rộng php.

hai cái cuối cùng đã thất bại với tôi: chúng gần đúng. sau đó tôi nghĩ sẽ thử "ab" và "abs".

lệnh "ab -k -c 350 -n 20000 example.com/" rất đẹp bởi vì tất cả đều dễ dàng hơn!

nhưng có ai nghĩ đến "localhost" trên bất kỳ máy chủ apache nào không, ví dụ như www.apachefriends.org?

bạn nên tạo một thư mục như "băng ghế dự bị" trong thư mục gốc nơi bạn có 2 tệp: kiểm tra "băng ghế dự bị" và tham chiếu "void.php".

và sau đó: điểm chuẩn nó!

băng ghế dự bị

<?php

for($i=1;$i<50000;$i++){
    print ('qwertyuiopasdfghjklzxcvbnm1234567890');
}
?>

void.php

<?php
?>

trên Máy tính để bàn của bạn, bạn nên sử dụng tệp .bat (trong Windows) như thế này:

băng ghế dự bị

"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/void.php
"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/bench.php
pause

Bây giờ nếu bạn chú ý kỹ ...

kịch bản void không tạo ra kết quả bằng không !!! VÌ KẾT LUẬN LÀ: từ kết quả thứ hai nên giảm kết quả đầu tiên !!!

tôi đã ở đây:

c:\xampp\htdocs\bench>"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/void.php
This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        Apache/2.4.33
Server Hostname:        localhost
Server Port:            80

Document Path:          /bench/void.php
Document Length:        0 bytes

Concurrency Level:      1
Time taken for tests:   11.219 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      2150000 bytes
HTML transferred:       0 bytes
Requests per second:    891.34 [#/sec] (mean)
Time per request:       1.122 [ms] (mean)
Time per request:       1.122 [ms] (mean, across all concurrent requests)
Transfer rate:          187.15 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.3      0       1
Processing:     0    1   0.9      1      17
Waiting:        0    1   0.9      1      17
Total:          0    1   0.9      1      17

Percentage of the requests served within a certain time (ms)
  50%      1
  66%      1
  75%      1
  80%      1
  90%      1
  95%      2
  98%      2
  99%      3
 100%     17 (longest request)

c:\xampp\htdocs\bench>"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/bench.php
This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        Apache/2.4.33
Server Hostname:        localhost
Server Port:            80

Document Path:          /bench/bench.php
Document Length:        1799964 bytes

Concurrency Level:      1
Time taken for tests:   177.006 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      18001600000 bytes
HTML transferred:       17999640000 bytes
Requests per second:    56.50 [#/sec] (mean)
Time per request:       17.701 [ms] (mean)
Time per request:       17.701 [ms] (mean, across all concurrent requests)
Transfer rate:          99317.00 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.3      0       1
Processing:    12   17   3.2     17      90
Waiting:        0    1   1.1      1      26
Total:         13   18   3.2     18      90

Percentage of the requests served within a certain time (ms)
  50%     18
  66%     19
  75%     19
  80%     20
  90%     21
  95%     22
  98%     23
  99%     26
 100%     90 (longest request)

c:\xampp\htdocs\bench>pause
Press any key to continue . . .

90-17 = 73 kết quả tôi mong đợi!


2

Tải thử nghiệm API của bạn bằng cách sử dụng chỉ ab là không đủ. Tuy nhiên, tôi nghĩ đó là một công cụ tuyệt vời để cung cấp cho bạn một ý tưởng cơ bản về cách trang web của bạn hoạt động.

Nếu bạn muốn sử dụng lệnh ab để kiểm tra nhiều điểm cuối API, với các dữ liệu khác nhau, tất cả cùng một lúc trong nền, bạn cần sử dụng lệnh "nohup". Nó chạy bất kỳ lệnh nào ngay cả khi bạn đóng terminal.

Tôi đã viết một tập lệnh đơn giản tự động hóa toàn bộ quá trình, thoải mái sử dụng nó: http://blog.ikvasnica.com/entry/load-test-multipl-api-endpoint-conc hiệnly- use-that-fax-shell-script

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.