Chuẩn bị cho việc kiểm tra các trang động
Trong chương này, chúng ta sẽ hiểu sự chuẩn bị cần thiết để kiểm tra các trang động. Trang web động phía máy chủ là trang web mà việc xây dựng được điều khiển bởi một máy chủ ứng dụng xử lý các tập lệnh phía máy chủ. Dự bị apache chỉ có thể tải thử nghiệm trang web động phía máy chủ.
Mức đồng thời và Tổng số yêu cầu
Mức đồng thời phải thấp hơn tổng số yêu cầu.
$ ab -l -r -n 30 -c 80 -k -H "Accept-Encoding: gzip, deflate" http://127.0.0.1:8000/
Output
ab: Cannot use concurrency level greater than total number of requests
Usage: ab [options] [http[s]://]hostname[:port]/path
Sử dụng cờ
Trong phần này, chúng tôi sẽ mô tả việc sử dụng một số cờ quan trọng với lệnh ab. Chúng tôi sẽ sử dụng các điều khoản, tùy chọn và cờ, thay thế cho nhau.
Verbose -v
Tùy chọn dài dòng có thể được sử dụng để phân tích và gỡ lỗi nếu có nhiều yêu cầu không thành công. Một dấu hiệu phổ biến về sự thất bại của thử nghiệm tải là thử nghiệm kết thúc rất nhanh và nó cung cấp một số tốt cho giá trị yêu cầu trên giây. Nhưng nó sẽ là một tiêu chuẩn sai. Để xác định thành công hay thất bại, bạn có thể sử dụng-v 2tùy chọn này sẽ kết xuất nội dung và tiêu đề của mỗi phản hồi tới đầu ra của thiết bị đầu cuối. Lệnh sau mô tả một ca sử dụng:
$ ab -n 1 -v 2 http://www.generic-example-URL.com/
Output
LOG: header received:
HTTP/1.0 200 OK
…
Content-Length: 2548687
Tất nhiên, nếu bạn đang kiểm tra các phản hồi thay đổi hoặc trả về mã HTTP không phải 200 trong trường hợp có bất kỳ lỗi nào, bạn chỉ cần bỏ qua kiểm tra độ dài với -lLựa chọn. Chúng ta sẽ sớm thấy HTTP không phải 200 khi chúng ta sẽ khởi chạy ứng dụng web2py trong các chương tiếp theo.
Giữ sống -k
Khi máy khách gửi yêu cầu HTTP, kết nối được thực hiện đến máy chủ, máy chủ sẽ gửi phản hồi và kết nối bị đóng sau khi nó đã gửi yêu cầu. Chu kỳ này tiếp tục với mỗi yêu cầu. Tuy nhiên, với cài đặt duy trì hoạt động (còn được gọi là kết nối liên tục), máy khách duy trì kết nối TCP cơ bản mở để tạo điều kiện cho nhiều yêu cầu và phản hồi; điều này giúp loại bỏ thời gian khởi tạo kết nối chậm và tốn kém mà nếu không sẽ có.
Độ dài tài liệu thay đổi -l
Nếu trang web có độ dài thay đổi, thì bạn nên sử dụng tùy chọn -l. Apache Bench không báo cáo lỗi nếu độ dài của các phản hồi không đổi. Điều này có thể hữu ích cho các trang động.
Sử dụng tùy chọn -r
Làm thế nào để buộc ab không thoát khi nhận lỗi? Bạn nên sử dụng tùy chọn-r. Nếu không có tùy chọn này, kiểm tra của bạn có thể bị hỏng ngay khi có bất kỳ yêu cầu nào gặp lỗi ổ cắm. Tuy nhiên, với tùy chọn này, lỗi sẽ được thông báo trong tiêu đề lỗi không đạt, nhưng quá trình kiểm tra sẽ tiếp tục cho đến khi kết thúc.
Sử dụng tùy chọn -H
Tùy chọn này được sử dụng để thêm dòng tiêu đề tùy ý. Đối số thường ở dạng dòng tiêu đề hợp lệ, chứa cặp giá trị trường được phân tách bằng dấu hai chấm (nghĩa là “Mã hóa chấp nhận: zip / zop; 8bit”).
Sử dụng tùy chọn -C
Trong phần sau, chúng ta sẽ tìm hiểu chi tiết cách sử dụng các tùy chọn trên kết hợp với tùy chọn sử dụng giá trị cookie, tức là -CLựa chọn. Tùy chọn -C thường ở dạngname = valueđôi. Trường này có thể được lặp lại.
Sử dụng Cookie phiên với Apache Bench
Để hiểu cách sử dụng cookie với Apache Bench, chúng tôi cần một trang web cố gắng đặt cookie. Một ví dụ rất hay là ứng dụng web2py là một khuôn khổ web python.
Cài đặt web2py
Chúng tôi sẽ nhanh chóng cài đặt một ứng dụng python web2py. Bạn có thể đọc thêm về cách sử dụng nó trên Tổng quan về Khung Web2py .
Python thường được cài đặt theo mặc định trên máy chủ Ubuntu và Debian. Do đó, một yêu cầu đã được đáp ứng để chạy web2py thành công.
Tuy nhiên, chúng tôi cần cài đặt gói giải nén để giải nén các tệp nguồn của web2py từ tệp zip mà chúng tôi sẽ tải xuống -
$ sudo apt-get update
$ sudo apt-get install unzip
Hãy để chúng tôi lấy khung công tác web2py từ trang web của dự án. Chúng tôi sẽ tải nó xuống thư mục chính của chúng tôi -
$cd ~
$ wget http://www.web2py.com/examples/static/web2py_src.zip
Bây giờ, chúng ta có thể giải nén tệp vừa tải xuống và chuyển vào bên trong -
$ unzip web2py_src.zip
$ cd web2py
Để chạy web2py, bạn không cần phải cài đặt nó. Khi bạn đã ở trong thư mục web2py, bạn có thể chạy nó bằng cách gõ lệnh sau:
$python web2py.py
Nếu mọi thứ thành công, bạn sẽ thấy kết quả sau, nơi bạn sẽ được yêu cầu chọn mật khẩu cho giao diện người dùng quản trị -
web2py Web Framework
Created by Massimo Di Pierro, Copyright 2007-2017
Version 2.14.6-stable+timestamp.2016.05.10.00.21.47
Database drivers available: sqlite3, imaplib, pymysql, pg8000
WARNING:web2py:GUI not available because Tk library is not installed
choose a password:
please visit:
http://127.0.0.1:8000/
use "kill -SIGTERM 23904" to shutdown the web2py server
Tuy nhiên, bạn cần lưu ý rằng giao diện web đã khởi chạy chỉ có thể truy cập trên máy cục bộ.
Từ đầu ra, bạn có thể hiểu rằng để dừng máy chủ web, bạn sẽ phải nhập “CTRL-C” trong thiết bị đầu cuối tức thì. Mặt khác, để dừng máy chủ web2py trên thiết bị đầu cuối khác có liên quan đến cùng một VPS, bạn có thể chèn lệnh kill -SIGTERM <PID>, trong đó <PID> là ID quy trình cho máy chủ web2py, trong trường hợp này là 23904.
Cookie phiên từ web2py
Nếu một trang chỉ có thể truy cập bởi một người dùng đã đăng nhập, không thể truy cập trực tiếp từ trang đăng nhập, trong trường hợp đó, bạn có thể sử dụng -Ccờ. Cờ này xác định một cookie cho lệnh ab. Nhưng bạn phải lấy giá trị của cookie nhận dạng phiên từ một phiên hợp lệ. Làm thế nào để có được điều đó? Nhiều hướng dẫn trực tuyến khác nhau sẽ hướng dẫn bạn sử dụng các công cụ dành cho nhà phát triển trình duyệt Chrome (hoặc Mozilla). Nhưng trong trường hợp thử nghiệm của chúng tôi, vì ứng dụng chỉ có sẵn trên dòng lệnh, chúng tôi sẽ sử dụng trình duyệt lynx để lấy giá trị.
Trước tiên, hãy để chúng tôi lấy giá trị cookie của một phiên. Mở một thiết bị đầu cuối khác và nhập lệnh sau:
$ lynx http://127.0.0.1:8000/
Đáp lại lệnh trên, lynx sẽ yêu cầu bạn cho phép chấp nhận cookie từ máy chủ web2py như thể hiện trong hình dưới đây.
Ghi lại giá trị cookie trước khi nhập yđể chấp nhận cookie. Bây giờ thiết bị đầu cuối sẽ giống như hình ảnh sau đây - trang web trên thiết bị đầu cuối!
Sau khi nhận được giá trị cookie, bây giờ chúng ta sẽ chạy thử nghiệm ab. Đối với điều đó, chúng tôi sẽ phải mở thiết bị đầu cuối thứ ba (xem hình ảnh bên dưới) -
Bây giờ, chúng ta hãy sử dụng cờ -C trong thiết bị đầu cuối thứ ba -
$ ab -n 100 -c 10 -C session_name = 127.0.0.1-643dad04-3c34 http://127.0.0.1:8000/
Đầu ra
This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient).....done
Server Software: Rocket
Server Hostname: 127.0.0.1
Server Port: 8000
Document Path: /
Document Length: 66 bytes
Concurrency Level: 10
Time taken for tests: 0.051 seconds
Complete requests: 100
Failed requests: 0
Non-2xx responses: 100
Total transferred: 27700 bytes
HTML transferred: 6600 bytes
Requests per second: 1968.12 [#/sec] (mean)
Time per request: 5.081 [ms] (mean)
Time per request: 0.508 [ms] (mean, across all concurrent requests)
Transfer rate: 532.39 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 2 0.9 2 4
Processing: 0 3 0.9 3 5
Waiting: 0 2 1.1 2 4
Total: 4 5 0.7 5 7
Percentage of the requests served within a certain time (ms)
50% 5
66% 5
75% 5
80% 6
90% 6
95% 6
98% 7
99% 7
100% 7 (longest request)
Từ kết quả ở trên, chúng tôi lưu ý một số điểm. Đầu tiên, web2py sử dụng máy chủ web Rocket . Chúng tôi cũng lưu ý rằng chúng tôi đang nhận được 'Câu trả lời không phải 2xx' ngoài các tiêu đề đã thảo luận trước đó trong đầu ra. Nói chung, giao thức Http phản hồi một yêu cầu bằng cách sử dụng mã phản hồi và bất kỳ thứ gì trong phạm vi 200 giây đều có nghĩa là 'được' và phần còn lại tương ứng với một số vấn đề. Ví dụ: 400s là lỗi liên quan đến tài nguyên như 404 File Not Found. 500s tương ứng với lỗi máy chủ. Trong trường hợp tức thì của chúng tôi, không có lỗi ở bất kỳ đâu ngoại trừ khi chúng tôi đang sử dụng tùy chọn -C. Nó có thể được ngăn chặn bằng cách sử dụng tùy chọn -l như đã được mô tả.
Kiểm tra trang quản trị
Trong phần này, chúng ta sẽ hiểu cách kiểm tra trang quản trị. Với mục đích so sánh, hãy để chúng tôi kiểm tra một URL khác của ứng dụng web2py -
$ ab -n 100 -c 10 session_name = 127.0.0.1-643dad04-3c34 http://127.0.0.1:8000/admin
Đầu ra
This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient).....done
Server Software: Rocket
Server Hostname: 127.0.0.1
Server Port: 8000
Document Path: /admin
Document Length: 8840 bytes
Concurrency Level: 10
Time taken for tests: 2.077 seconds
Complete requests: 100
Failed requests: 0
Total transferred: 926700 bytes
HTML transferred: 884000 bytes
Requests per second: 48.14 [#/sec] (mean)
Time per request: 207.749 [ms] (mean)
Time per request: 20.775 [ms] (mean, across all concurrent requests)
Transfer rate: 435.61 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 3.2 0 12
Processing: 62 204 52.2 199 400
Waiting: 61 203 52.0 199 400
Total: 62 205 54.3 199 411
Percentage of the requests served within a certain time (ms)
50% 199
66% 211
75% 220
80% 226
90% 264
95% 349
98% 381
99% 411
100% 411 (longest request)
Đặc biệt, bạn cần lưu ý thống kê tương ứng trong phần “Thời gian kết nối” và “Phần trăm yêu cầu được phục vụ…” trong số http://127.0.0.1:8000/ và http://127.0.0.1:8000/admin. Có một sự khác biệt lớn.
Sử dụng tùy chọn Timelimit
Nói chung, tùy chọn Timelimit là một lựa chọn phức tạp. Hãy để chúng tôi hiểu điều này từ hướng dẫn sử dụng ab , khá giải thích -
-t timelimit
Maximum number of seconds to spend for benchmarking. This implies a -n 50000 internally.
Use this to benchmark the server within a fixed total amount of time.
Per default there is no timelimit.
Hãy để chúng tôi chạy thử nghiệm với tùy chọn này. Chúng tôi sẽ ghi nhận những quan sát của chúng tôi sau khi xem qua đầu ra -
$ ab -n 100 -c 10 -t 60 http://127.0.0.1:8000/
Đầu ra
This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient)
Completed 5000 requests
Completed 10000 requests
Completed 15000 requests
Completed 20000 requests
Completed 25000 requests
Completed 30000 requests
Completed 35000 requests
Completed 40000 requests
Completed 45000 requests
Completed 50000 requests
Finished 50000 requests
Server Software: Rocket
Server Hostname: 127.0.0.1
Server Port: 8000
Document Path: /
Document Length: 66 bytes
Concurrency Level: 10
Time taken for tests: 22.547 seconds
Complete requests: 50000
Failed requests: 0
Non-2xx responses: 50000
Total transferred: 13850000 bytes
HTML transferred: 3300000 bytes
Requests per second: 2217.61 [#/sec] (mean)
Time per request: 4.509 [ms] (mean)
Time per request: 0.451 [ms] (mean, across all concurrent requests)
Transfer rate: 599.88 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 2 0.8 2 8
Processing: 0 2 3.2 2 218
Waiting: 0 2 3.2 2 218
Total: 2 4 3.1 4 220
Percentage of the requests served within a certain time (ms)
50% 4
66% 4
75% 4
80% 5
90% 5
95% 5
98% 7
99% 8
100% 220 (longest request)
Lưu ý rằng đầu ra hiển thị tùy chọn này ghi đè số lượng yêu cầu được chỉ định bởi -nvà tiếp tục tối đa 50 nghìn yêu cầu. Tuy nhiên, vì các yêu cầu được xử lý rất nhanh, ab đã kết thúc ngay khi đạt được mốc 50k - trong vòng 22 giây (xem tiêu đề Thời gian thực hiện cho các bài kiểm tra) trong trường hợp tức thì.
Bạn có thể kiểm tra cùng một lệnh thay thế http://127.0.0.1:8000/ với http://127.0.0.1:8000/admin (giả sử đó là ứng dụng web2py của chúng tôi) hoặc trang web của bên thứ ba như https://www.apache.org/, hãy lưu ý sự khác biệt về số liệu thống kê.
Danh sách kiểm tra trước khi thực hiện kiểm tra tải
Có một số kiểm tra sẽ giúp bạn chạy thử nghiệm thành công và đo lường hiệu suất một cách chính xác. Xem xét các điều kiện sau trước khi thực hiện thử nghiệm tải -
Đảm bảo rằng không có mô-đun python bổ sung nào được tải.
Để tránh tình trạng cạn kiệt cổng TCP / IP, bạn thường nên đợi 2-3 phút trước khi chuyển sang kiểm tra ab khác.
Đảm bảo rằng số lượng kết nối đồng thời thấp hơn Apache Worker Threads.
Bạn nên khởi động lại máy chủ trước khi thực hiện một thử nghiệm khác, nếu Apache hoặc python gặp sự cố.