Apache Bench - Hướng dẫn nhanh
Kiểm tra hiệu suất đã được chứng minh là rất quan trọng cho sự thành công của một doanh nghiệp. Một trang web hoạt động kém không chỉ đối mặt với tổn thất tài chính mà đôi khi còn có thể dẫn đến hậu quả pháp lý.
Không ai muốn gặp phải một trang web hoạt động chậm chạp, không đáng tin cậy trong các tương tác trực tuyến quan trọng như mua hàng, làm bài kiểm tra trực tuyến, thanh toán hóa đơn, v.v. Với việc Internet được phổ biến rộng rãi, phạm vi các lựa chọn thay thế là vô cùng lớn. Đánh mất khách hàng dễ hơn đạt được họ và hiệu suất là yếu tố thay đổi cuộc chơi chính.
Cần một công cụ kiểm tra tải
Nếu chúng ta có thể hiểu nhu cầu của một công cụ kiểm tra tải là gì, nó sẽ cho chúng ta lý do và động lực để sử dụng nó. Một số trang web kinh doanh nổi tiếng đã phải trải qua thời gian ngừng hoạt động nghiêm trọng khi họ có số lượng lớn người truy cập. Các trang web thương mại điện tử đầu tư rất nhiều vào các chiến dịch quảng cáo, nhưng không đầu tư vào Kiểm tra tải. Do đó, họ không đảm bảo hiệu suất hệ thống tối ưu khi hoạt động tiếp thị đó mang lại lưu lượng truy cập.
Một ví dụ quen thuộc khác của việc bỏ qua kiểm tra tải là "lỗi thiết lập kết nối" trong các trang web WordPress. Do đó, bạn nên tải thử một trang web hoặc ứng dụng trước khi triển khai trong sản xuất. Thật tốt khi nhanh chóng thiết lập một tình huống tốt nhất cho một dự án trước khi chạy các thử nghiệm chi tiết hơn.
Apache Bench là gì?
Apache Bench (ab) là một công cụ của tổ chức Apache để đo điểm chuẩn cho máy chủ web Giao thức truyền siêu văn bản (HTTP). Mặc dù nó được thiết kế để đo hiệu suất của máy chủ web Apache, nhưng nó cũng có thể được sử dụng để kiểm tra bất kỳ máy chủ web nào khác cũng tốt như nhau. Với công cụ này, bạn có thể nhanh chóng biết máy chủ web của bạn có khả năng phục vụ bao nhiêu yêu cầu mỗi giây.
Đặc điểm của Apache Bench
Hãy để chúng tôi xem các tính năng quan trọng và hạn chế của Apache Bench. Các tính năng và hạn chế được liệt kê bên dưới -
Là một phần mềm mã nguồn mở, nó có sẵn miễn phí.
Nó là một chương trình máy tính dòng lệnh đơn giản.
Nó là một công cụ độc lập với nền tảng. Nó có nghĩa là nó có thể được gọi trên Linux / Unix hoặc trên máy chủ Windows đều tốt như nhau.
Nó có thể tiến hành kiểm tra tải và hiệu suất chỉ cho máy chủ web - HTTP hoặc HTTPS.
Nó không thể mở rộng.
Apache Bench chỉ sử dụng một luồng hệ điều hành bất kể mức đồng thời (được chỉ định bởi cờ -c). Do đó, khi đo điểm chuẩn cho các máy chủ dung lượng cao, bản thân một phiên bản Apache Bench có thể là một nút cổ chai. Để bão hòa hoàn toàn URL mục tiêu, tốt hơn nên sử dụng song song các phiên bản bổ sung của Apache Bench, nếu máy chủ của bạn có nhiều lõi xử lý.
Đề phòng
Bạn cần lưu ý rằng không có chỉ thị nào trong Apache Bench để tăng tính đồng thời trong các khoảng thời gian cụ thể trong khi chạy thử nghiệm. Do đó, chạy kiểm tra tải bằng ab tương đương với một cuộc tấn công từ chối dịch vụ (DOS). Bạn nên thông báo và xin phép trước từ nhà cung cấp dịch vụ VPS của mình nếu bạn định kiểm tra tải nặng trong một khoảng thời gian dài. Họ sẽ phân bổ cho bạn một khoảng thời gian thích hợp hoặc chuyển nút của bạn cho nhiệm vụ kiểm tra tải.
Thứ hai, nếu bạn đang kiểm tra trang web của người thứ ba liên tục và trong thời gian dài chỉ để học Apache Bench từ VPS của bạn (trở thành nút kiểm tra), thì có khả năng từ xa rằng IP công cộng của VPS của bạn có thể bị trang web của người thứ ba chặn. vĩnh viễn. Trong trường hợp đó, bạn sẽ không thể kết nối với trang web đó bằng cùng một IP. Nhưng nếu bạn thực sự muốn kết nối với trang web trong tương lai, giải pháp duy nhất sẽ là nói chuyện với quản trị viên hệ thống của trang web mục tiêu, hoặc tạo một phiên bản mới của máy chủ với một IP khác với sự trợ giúp của nhà cung cấp dịch vụ VPS của bạn.
Đã cảnh báo với bạn, hãy để tôi đảm bảo với bạn rằng tất cả các bài kiểm tra trong hướng dẫn này đều đủ an toàn và không nằm ngoài những gì mà quản trị viên hệ thống thường gọi là "lạm dụng hệ thống".
Trong chương này, chúng tôi sẽ hướng dẫn bạn cách thiết lập môi trường cho Apache Bench trên VPS của bạn.
Yêu cầu hệ thống
Memory - 128 MB
Disk Space - Không có yêu cầu tối thiểu
Operating System - Không có yêu cầu tối thiểu
Cài đặt Apache Bench
Apache Bench là một ứng dụng độc lập và không phụ thuộc vào cài đặt máy chủ web Apache. Sau đây là quy trình hai bước để cài đặt Apache Bench.
Step 1 - Cập nhật cơ sở dữ liệu gói.
# apt-get update
Xin lưu ý rằng ký hiệu # trước lệnh đầu cuối có nghĩa là người dùng root đang phát hành lệnh đó.
Step 2 - Cài đặt gói utils apache2 để có quyền truy cập vào Apache Bench.
# apt-get install apache2-utils
Apache Bench hiện đã được cài đặt. Nếu bạn muốn kiểm tra một ứng dụng web được lưu trữ trên cùng một VPS, thì chỉ cần cài đặt máy chủ web Apache là đủ -
# apt-get install apache2
Là một tiện ích Apache, Apache Bench được cài đặt tự động khi cài đặt máy chủ web Apache.
Xác minh cài đặt Apache Bench
Bây giờ chúng ta hãy xem cách xác minh Cài đặt Apache Bench. Đoạn mã sau sẽ giúp xác minh cài đặt -
# ab -V
Output
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/
Khi bạn nhìn thấy kết quả đầu cuối ở trên, có nghĩa là bạn đã cài đặt Apache Bench thành công.
Tạo Người dùng Sudo Đặc quyền
Từ quan điểm an toàn, quản trị viên hệ thống được coi là một phương pháp hay để tạo người dùng sudo thay vì làm việc với tư cách là người chủ. Chúng tôi sẽ tạo một người dùng thử nghiệm, có tên là thử nghiệm, với mục đích -
# useradd -m -d /home/test -g sudo test
Hãy để chúng tôi đặt mật khẩu cho người dùng mới -
# passwd test
Hệ thống sẽ nhắc nhập mật khẩu mới để kiểm tra người dùng. Bạn có thể nhập một mật khẩu đơn giản vì chúng tôi chỉ đang thử nghiệm và không triển khai đến máy chủ sản xuất. Thông thường lệnh sudo sẽ nhắc bạn cung cấp mật khẩu người dùng sudo; không nên sử dụng mật khẩu phức tạp vì quá trình trở nên phức tạp.
Output
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Thử nghiệm trang web Apache.org
Trong phần này, chúng tôi sẽ kiểm tra Trang web Apache.org. Đầu tiên chúng ta hãy chuyển sang kiểm tra người dùng sudo -
# su test
Để bắt đầu, chúng tôi sẽ kiểm tra trang web của tổ chức Apache, https://www.apache.org/. Đầu tiên chúng ta sẽ chạy lệnh và sau đó hiểu kết quả đầu ra -
$ ab -n 100 -c 10 https://www.apache.org/
Đây -nlà số lượng yêu cầu thực hiện cho phiên đo điểm chuẩn. Mặc định là chỉ thực hiện một yêu cầu duy nhất thường dẫn đến kết quả điểm chuẩn không mang tính đại diện.
Và -clà đồng thời và biểu thị số lượng nhiều yêu cầu thực hiện cùng một lúc. Mặc định là một yêu cầu tại một thời điểm.
Vì vậy, trong thử nghiệm này, Apache Bench sẽ thực hiện 100 yêu cầu với đồng thời 10 tới máy chủ của tổ chức Apache.
Output
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 www.apache.org (be patient).....done
Server Software: Apache/2.4.7
Server Hostname: www.apache.org
Server Port: 443
SSL/TLS Protocol: TLSv1.2,ECDHE-RSA-AES256-GCM-SHA384,2048,256
Document Path: /
Document Length: 58769 bytes
Concurrency Level: 10
Time taken for tests: 1.004 seconds
Complete requests: 100
Failed requests: 0
Total transferred: 5911100 bytes
HTML transferred: 5876900 bytes
Requests per second: 99.56 [#/sec] (mean)
Time per request: 100.444 [ms] (mean)
Time per request: 10.044 [ms] (mean, across all concurrent requests)
Transfer rate: 5747.06 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 39 46 30.9 41 263
Processing: 37 40 21.7 38 255
Waiting: 12 15 21.7 13 230
Total: 77 86 37.5 79 301
Percentage of the requests served within a certain time (ms)
50% 79
66% 79
75% 80
80% 80
90% 82
95% 84
98% 296
99% 301
100% 301 (longest request)
Sau khi chạy thử nghiệm đầu tiên của chúng tôi, bạn sẽ dễ dàng nhận ra mô hình sử dụng cho lệnh này như sau:
# ab [options .....] URL
Ở đâu,
ab - Lệnh Apache Bench
options - cờ cho nhiệm vụ cụ thể mà chúng tôi muốn thực hiện
URL - url đường dẫn chúng tôi muốn kiểm tra
Hiểu các giá trị đầu ra
Chúng ta cần hiểu các số liệu khác nhau để hiểu các giá trị đầu ra khác nhau được trả về bởi ab. Đây là danh sách -
Server Software - Đây là tên của máy chủ web được trả về trong tiêu đề HTTP của lần trả lại thành công đầu tiên.
Server Hostname - Đây là địa chỉ DNS hoặc IP được đưa ra trên dòng lệnh.
Server Port- Đây là cổng mà ab đang kết nối. Nếu không có cổng nào được cung cấp trên dòng lệnh, nó sẽ mặc định là 80 đối với http và 443 đối với https.
SSL/TLS Protocol- Đây là tham số giao thức được thương lượng giữa máy khách và máy chủ. Điều này sẽ chỉ được in nếu SSL được sử dụng.
Document Path - Đây là URI yêu cầu được phân tích cú pháp từ chuỗi dòng lệnh.
Document Length- Là kích thước tính bằng byte của tài liệu đầu tiên được trả về thành công. Nếu độ dài tài liệu thay đổi trong quá trình thử nghiệm, phản hồi được coi là lỗi.
Concurrency Level - Đây là số lượng máy khách đồng thời (tương đương với trình duyệt web) được sử dụng trong quá trình kiểm tra.
Time Taken for Tests - Đây là thời gian tính từ thời điểm kết nối ổ cắm đầu tiên được tạo đến thời điểm nhận được phản hồi cuối cùng.
Complete Requests - Số lượng phản hồi thành công nhận được.
Failed Requests- Số lượng yêu cầu được coi là thất bại. Nếu số lớn hơn 0, một dòng khác sẽ được in hiển thị số lượng yêu cầu không thành công do kết nối, đọc, độ dài nội dung không chính xác hoặc ngoại lệ.
Total Transferred- Tổng số byte nhận được từ máy chủ. Con số này về cơ bản là số byte được gửi qua dây.
HTML Transferred- Tổng số byte tài liệu nhận được từ máy chủ. Con số này không bao gồm các byte nhận được trong tiêu đề HTTP
Requests per second- Đây là số lượng yêu cầu mỗi giây. Giá trị này là kết quả của việc chia số lượng yêu cầu cho tổng thời gian thực hiện.
Time per request- Thời gian trung bình dành cho mỗi yêu cầu. Giá trị đầu tiên được tính với công thức đồng thời * thời gian thực hiện * 1000 / hoàn thành trong khi giá trị thứ hai được tính với công thức thời gian thực hiện * 1000 / hoàn thành
Transfer rate - Tốc độ truyền được tính bằng tổng công thức / 1024 / thời gian thực hiện.
Phân tích nhanh kết quả kiểm tra tải
Sau khi đã tìm hiểu về các tiêu đề của giá trị đầu ra từ lệnh ab, chúng ta hãy thử phân tích và hiểu các giá trị đầu ra cho thử nghiệm ban đầu của chúng tôi -
Tổ chức Apache đang sử dụng Phần mềm máy chủ web của riêng họ - Apache (phiên bản 2.4.7)
Máy chủ đang lắng nghe trên Cổng 443 vì https. Nếu nó là http, nó sẽ là 80 (mặc định).
Tổng dữ liệu được truyền là 58769 byte cho 100 yêu cầu.
Kiểm tra hoàn thành trong 1.004 giây. Không có yêu cầu không thành công.
Yêu cầu mỗi giây - 99,56. Đây được coi là một con số khá tốt.
Thời gian cho mỗi yêu cầu - 100,444 ms (cho 10 yêu cầu đồng thời). Vì vậy, trên tất cả các yêu cầu, nó là 100,444 ms / 10 = 10,044 ms.
Tốc độ truyền - nhận được 1338,39 [Kbyte / giây].
Trong thống kê thời gian kết nối, bạn có thể thấy rằng nhiều yêu cầu đã phải đợi trong vài giây. Điều này có thể là do máy chủ web apache đưa các yêu cầu vào hàng đợi.
Trong thử nghiệm đầu tiên, chúng tôi đã thử nghiệm một ứng dụng (tức là www.apache.org) được lưu trữ trên một máy chủ khác. Trong phần sau của hướng dẫn, chúng tôi sẽ thử nghiệm các ứng dụng web mẫu của chúng tôi được lưu trữ trên cùng một máy chủ mà từ đó chúng tôi sẽ chạy các thử nghiệm ab. Điều này là để dễ học và mục đích trình diễn. Tốt nhất, nút máy chủ và nút kiểm tra phải khác nhau để đo lường chính xác.
Để học ab tốt hơn, bạn nên so sánh và quan sát các giá trị đầu ra khác nhau như thế nào đối với các trường hợp khác nhau khi chúng ta tiếp tục trong hướng dẫn này.
Vẽ đầu ra của Apache Bench
Ở đây chúng tôi sẽ vẽ sơ đồ kết quả có liên quan để xem máy chủ mất bao nhiêu thời gian khi số lượng yêu cầu tăng lên. Vì vậy, chúng tôi sẽ thêm-g trong lệnh trước đó, theo sau là tên tệp (ở đây là out.data), trong đó dữ liệu đầu ra ab sẽ được lưu -
$ ab -n 100 -c 10 -g out.data https://www.apache.org/
Bây giờ chúng ta hãy xem out.data trước khi chúng tôi tạo một âm mưu -
$ less out.data
Output
starttime seconds ctime dtime ttime wait
Tue May 30 12:11:37 2017 1496160697 40 38 77 13
Tue May 30 12:11:37 2017 1496160697 42 38 79 13
Tue May 30 12:11:37 2017 1496160697 41 38 80 13
...
Bây giờ chúng ta hãy hiểu các tiêu đề cột trong out.data tập tin -
starttime - Đây là ngày và giờ bắt đầu cuộc gọi.
seconds - Giống như thời gian bắt đầu nhưng ở định dạng dấu thời gian Unix (date -d @ 1496160697 trả về đầu ra thời gian bắt đầu).
ctime - Đây là thời gian kết nối.
dtime - Đây là thời gian xử lý.
ttime - Đây là Tổng thời gian (nó là tổng của ctime và dtime, theo toán học ttime = ctime + dtime).
wait - Đây là thời gian chờ đợi.
Để có hình ảnh trực quan về cách nhiều mục này có liên quan với nhau, hãy xem hình ảnh sau:
Nếu chúng tôi đang làm việc trên thiết bị đầu cuối hoặc không có đồ họa, gnuplotlà một lựa chọn tuyệt vời. Chúng ta sẽ nhanh chóng hiểu nó bằng cách đi qua các bước sau.
Hãy để chúng tôi cài đặt và khởi chạy gnuplot -
$ sudo apt-get install gnuplot
$ gnuplot
Output
G N U P L O T
Version 4.6 patchlevel 6 last modified September 2014
Build System: Linux x86_64
Copyright (C) 1986-1993, 1998, 2004, 2007-2014
Thomas Williams, Colin Kelley and many others
gnuplot home: http://www.gnuplot.info
faq, bugs, etc: type "help FAQ"
immediate help: type "help" (plot window: hit 'h')
Terminal type set to 'qt'
gnuplot>
Vì chúng tôi đang làm việc trên thiết bị đầu cuối và giả sử rằng đồ họa không có sẵn, chúng tôi có thể chọn thiết bị đầu cuối câm sẽ cung cấp đầu ra trong ASCII qua chính thiết bị đầu cuối. Điều này giúp chúng tôi biết được cốt truyện của mình trông như thế nào với công cụ nhanh chóng này. Bây giờ chúng ta hãy chuẩn bị thiết bị đầu cuối cho âm mưu ASCII.
gnuplot> set terminal dumb
Output
Terminal type set to 'dumb'
Options are 'feed size 79, 24'
Vì thiết bị đầu cuối gnuplot của chúng tôi hiện đã sẵn sàng cho biểu đồ ASCII, hãy để chúng tôi vẽ biểu đồ dữ liệu từ out.data tập tin -
gnuplot> plot "out.data" using 9 w l
Output
1400 ++-----+------+-----+------+------+------+------+-----+------+-----++
+ + + + + + +"out.data" using 9 ****** +
| |
1200 ++ ********************************************
| ******************* |
1000 ++ * ++
| * |
| * |
800 ++ * ++
| * |
| * |
600 ++ * ++
| * |
| * |
400 ++ * ++
| * |
200 ++ * ++
| * |
+**** + + + + + + + + + +
0 ++-----+------+-----+------+------+------+------+-----+------+-----++
0 10 20 30 40 50 60 70 80 90 100
Chúng tôi đã vẽ biểu đồ ttime, tổng thời gian (tính bằng mili giây) từ cột 9, liên quan đến số lượng yêu cầu. Chúng ta có thể nhận thấy rằng đối với mười yêu cầu ban đầu, tổng thời gian là gần 100 mili giây, đối với 30 yêu cầu tiếp theo (từ thứ 10 đến thứ 40 ), nó đã tăng lên 1100 mili giây, v.v. Cốt truyện của bạn phải khác nhau tùy thuộc vàoout.data.
Trong chương trước, chúng ta đã hiểu cách sử dụng cơ bản của Apache Bench để kiểm tra trang web của bên thứ ba. Trong phần này, chúng tôi sẽ sử dụng công cụ này để kiểm tra một ứng dụng web trên máy chủ của chính chúng tôi. Để giữ cho hướng dẫn khép kín trong phạm vi có thể, chúng tôi đã chọn cài đặt một ứng dụng python cho mục đích trình diễn; bạn có thể chọn bất kỳ ngôn ngữ nào khác như PHP hoặc Ruby tùy thuộc vào trình độ chuyên môn của bạn.
Cài đặt Python
Nói chung, Python được cài đặt theo mặc định trên các máy chủ Linux.
Cài đặt Khung Chai và Tạo một Ứng dụng Đơn giản
Chai là một khuôn khổ vi mô được viết bằng python để tạo các ứng dụng web và pip là trình quản lý gói python. Gõ lệnh sau vào terminal để cài đặt Chai -
$ sudo apt-get install python-pip
$ sudo pip install bottle
Bây giờ chúng ta hãy tạo một ứng dụng Chai nhỏ. Để làm được điều đó, hãy tạo một thư mục và chuyển vào bên trong nó -
$ mkdir webapp
$ cd webapp
Chúng tôi sẽ tạo một tập lệnh python mới, app.py, bên trong thư mục ứng dụng web -
$ vim app.py
Bây giờ, hãy viết đoạn mã sau vào tệp app.py -
from bottle import Bottle, run
app = Bottle()
@app.route('/')
@app.route('/hello')
def hello():
return "Hello World!"
run(app, host = 'localhost', port = 8080)
Khi bạn đã thêm các dòng trên, hãy lưu và đóng tệp. Sau khi lưu tệp, chúng tôi có thể chạy tập lệnh python để khởi chạy ứng dụng -
$ python app.py
Output
Bottle v0.12.7 server starting up (using WSGIRefServer())...
Listening on http://localhost:8080/
Hit Ctrl-C to quit.
Kết quả này cho thấy rằng ứng dụng của chúng tôi đang chạy trên máy cục bộ tại máy chủ http://localhost và nghe trên cổng 8080.
Hãy để chúng tôi kiểm tra xem ứng dụng của chúng tôi có phản hồi đúng các yêu cầu HTTP hay không. Vì thiết bị đầu cuối này không thể nhận bất kỳ thông tin đầu vào nào nếu không cung cấp ứng dụng Chai, chúng tôi cần đăng nhập vào VPS của mình bằng thiết bị đầu cuối khác. Sau khi đăng nhập vào VPS bằng một thiết bị đầu cuối khác, bạn có thể điều hướng đến ứng dụng của mình bằng cách nhập mã sau vào thiết bị đầu cuối mới.
$ lynx http://localhost:8080/
Lynx là một trình duyệt dòng lệnh và thường được cài đặt theo mặc định trong các bản phân phối Linux khác nhau như Debian và Ubuntu. Nếu bạn thấy kết quả sau, điều đó có nghĩa là ứng dụng của bạn đang hoạt động tốt.
Output
Nếu bạn thấy kết quả ở trên, điều đó có nghĩa là ứng dụng của chúng tôi đã hoạt động và sẵn sàng để thử nghiệm.
Kiểm tra Ứng dụng với Máy chủ Web Phát triển
Xin lưu ý rằng có một lỗi trong ab và nó không thể kiểm tra ứng dụng trên localhost. Vì vậy, chúng tôi sẽ thay đổi máy chủ lưu trữ từ localhost thành 127.0.0.1 trong tệp app.py. Vì vậy, tệp sẽ thay đổi thành như sau:
from bottle import Bottle, run
app = Bottle()
@app.route('/')
@app.route('/hello')
def hello():
return "Hello World!"
run(app, host = '127.0.0.1', port = 8080)
Bây giờ chúng ta hãy thử nghiệm ứng dụng của mình bằng cách gõ lệnh sau trên cùng một thiết bị đầu cuối đã chạy lệnh lynx:
$ ab -n 100 -c 10 http://127.0.0.1:8080/hello
Output
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: WSGIServer/0.1
Server Hostname: 127.0.0.1
Server Port: 8080
Document Path: /hello
Document Length: 12 bytes
Concurrency Level: 10
Time taken for tests: 0.203 seconds
Complete requests: 100
Failed requests: 0
Total transferred: 16500 bytes
HTML transferred: 1200 bytes
Requests per second: 493.78 [#/sec] (mean)
Time per request: 20.252 [ms] (mean)
Time per request: 2.025 [ms] (mean, across all concurrent requests)
Transfer rate: 79.56 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 0
Processing: 1 6 28.2 2 202
Waiting: 1 6 28.2 2 202
Total: 1 6 28.2 2 202
Percentage of the requests served within a certain time (ms)
50% 2
66% 2
75% 2
80% 2
90% 2
95% 2
98% 202
99% 202
100% 202 (longest request)
Trong khi đầu ra trên thiết bị đầu cuối đầu tiên sẽ là (100 lần) như sau:
...
127.0.0.1 - - [10/Jun/2017 04:30:26] "GET /hello HTTP/1.0" 200 12
127.0.0.1 - - [10/Jun/2017 04:30:26] "GET /hello HTTP/1.0" 200 12
127.0.0.1 - - [10/Jun/2017 04:30:26] "GET /hello HTTP/1.0" 200 12
...
Bạn có thể quan sát các giá trị khác nhau của kết quả ab đã thay đổi như thế nào so với thử nghiệm ban đầu.
Kiểm tra ứng dụng bằng máy chủ web đa luồng
Trong các thử nghiệm trước đây của ab, chúng tôi đã sử dụng máy chủ web mặc định được đóng gói trong khuôn khổ Chai.
Bây giờ chúng ta sẽ thay đổi máy chủ web mặc định đơn luồng bằng máy chủ đa luồng. Do đó, chúng ta hãy cài đặt một thư viện máy chủ web đa luồng nhưcherrypy hoặc là gunicornvà nói với Chai để sử dụng nó. Chúng tôi đã chọn gunicorn cho mục đích trình diễn ở đây (bạn cũng có thể chọn một số khác) -
$ sudo apt-get install gunicorn
Và sửa đổi tệp, đó là thay đổi từ máy chủ web mặc định thành gunicorn -
...
run(server = 'gunicorn'...)
...
Hãy để chúng tôi kiểm tra ứng dụng trong thiết bị đầu cuối thứ hai.
$ ab -n 100 -c 10 http://127.0.0.1:8080/hello
Output
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: gunicorn/19.0.0
Server Hostname: 127.0.0.1
Server Port: 8080
Document Path: /hello
Document Length: 12 bytes
Concurrency Level: 10
Time taken for tests: 0.031 seconds
Complete requests: 100
Failed requests: 0
Total transferred: 17200 bytes
HTML transferred: 1200 bytes
Requests per second: 3252.77 [#/sec] (mean)
Time per request: 3.074 [ms] (mean)
Time per request: 0.307 [ms] (mean, across all concurrent requests)
Transfer rate: 546.36 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 0.9 0 4
Processing: 1 2 0.7 3 4
Waiting: 0 2 0.8 2 3
Total: 2 3 0.6 3 5
WARNING: The median and mean for the initial connection time are not within a normal
deviation These results are probably not that reliable.
WARNING: The median and mean for the processing time are not within a normal deviation
These results are probably not that reliable.
Percentage of the requests served within a certain time (ms)
50% 3
66% 3
75% 3
80% 3
90% 4
95% 5
98% 5
99% 5
100% 5 (longest request)
Quan sát cách Yêu cầu mỗi giây tăng từ 493 lên 3252. Điều đó có nghĩa là gunicorn phù hợp làm máy chủ sản xuất cho ứng dụng python.
Trong chương này, chúng ta sẽ học cách kiểm tra nhiều URL đồng thời. Đối với điều đó, chúng tôi sẽ cần chỉnh sửa tệp ứng dụng của mình, app.py để bao gồm hai URL -
from bottle import Bottle, run
app = Bottle()
@app.route('/')
@app.route('/hello1')
def hello():
return "Hello World! It is first URL."
@app.route('/hello2')
def hello():
return "Hello World! It is second URL."
run(app,server = 'gunicorn',host = '127.0.0.1', port = 8080)
Tạo một tập lệnh Shell đơn giản
Bạn có thể làm điều này bằng cách tạo một tập lệnh shell, với nhiều lệnh gọi ab. Tạo một tệp test.sh và thêm các dòng sau vào tệp đó:
ab -n 100 -c 10 http://127.0.0.1:8080/hello1
ab -n 100 -c 10 http://127.0.0.1:8080/hello2
Khi bạn đã thêm các dòng trên, Lưu và Đóng tệp. Làm cho tệp thực thi được -
chmod u+x test.sh
Bây giờ chúng ta hãy chạy script -
./test.sh
Để tránh lặp lại và mục đích rõ ràng, chúng tôi sẽ chỉ hiển thị phần liên quan của đầu ra ab, chỉ ra bằng dấu chấm phần nào đã bị bỏ qua, như trong phần sau.
Đầu ra
.
.
.
Document Path: /hello1
Document Length: 732 bytes
Concurrency Level: 10
Time taken for tests: 0.040 seconds
Complete requests: 100
Failed requests: 0
Non-2xx responses: 100
Total transferred: 90000 bytes
HTML transferred: 73200 bytes
Requests per second: 2496.13 [#/sec] (mean)
Time per request: 4.006 [ms] (mean)
Time per request: 0.401 [ms] (mean, across all concurrent requests)
Transfer rate: 2193.87 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.8 0 3
Processing: 1 3 1.0 4 5
Waiting: 0 3 1.2 4 4
Total: 1 4 0.6 4 5
WARNING: The median and mean for the processing time are not within a normal deviation
These results are probably not that reliable.
.
.
.
Shell Script để lưu đầu ra Apache Bench vào một tệp
Bạn có thể lưu Đầu ra của Apache Bench vào tệp bằng cách tạo một tập lệnh shell, với nhiều lệnh gọi ab. Ở cuối mỗi dòng, đặt một&;điều này làm cho lệnh chạy trong nền và cho phép lệnh tiếp theo bắt đầu thực thi. Bạn cũng sẽ muốn chuyển hướng đầu ra đến một tệp cho mỗi url bằng cách sử dụng <tên tệp>. Ví dụ: tệp test.sh của chúng tôi sẽ trông giống như sau sau khi sửa đổi:
$ ab -n 100 -c 10 http://127.0.0.1:8080/hello1 > test1.txt &
$ ab -n 100 -c 10 http://127.0.0.1:8080/hello2 > test2.txt &
Đây, test1.txt và test2.txt là các tệp để lưu dữ liệu đầu ra.
Bạn có thể kiểm tra xem tập lệnh trên đã tạo hai tệp, test1.txt và test2.txt chứa đầu ra ab cho các URL tương ứng hay chưa -
$ ls -l
Đầu ra
...
-rw-r--r-- 1 root root 5225 May 30 12:11 out.data
-rwxr--r-- 1 root root 118 Jun 10 12:24 test.sh
-rw-r--r-- 1 root root 1291 Jun 10 12:31 test1.txt
-rwxr--r-- 1 root root 91 Jun 10 13:22 test2.sh
-rw-r--r-- 1 root root 1291 Jun 10 12:31 test2.txt
...
Tình huống đề phòng
Trong khi sử dụng ab, bạn nên cảnh giác với việc kiểm tra không thành công mà không có cảnh báo. Ví dụ: nếu bạn kiểm tra một URL sai, bạn có thể nhận được một cái gì đó tương tự như sau (chúng tôi đã cố tình thay đổi cổng ở đây).
$ ab -l -r -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://127.0.0.1:805/
Đầ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:
Server Hostname: 127.0.0.1
Server Port: 805
Document Path: /
Document Length: Variable
Concurrency Level: 10
Time taken for tests: 0.002 seconds
Complete requests: 100
Failed requests: 150
(Connect: 0, Receive: 100, Length: 0, Exceptions: 50)
Keep-Alive requests: 0
Total transferred: 0 bytes
HTML transferred: 0 bytes
Requests per second: 44984.26 [#/sec] (mean)
Time per request: 0.222 [ms] (mean)
Time per request: 0.022 [ms] (mean, across all concurrent requests)
Transfer rate: 0.00 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 0 0 0.2 0 0
Waiting: 0 0 0.0 0 0
Total: 0 0 0.2 0 0
Percentage of the requests served within a certain time (ms)
50% 0
66% 0
75% 0
80% 0
90% 0
95% 0
98% 0
99% 0
100% 0 (longest request)
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ì (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 bên dưới 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. Để làm được điều đó, chúng ta 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 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ố.
Trong chương này, chúng tôi sẽ mô tả các kết hợp khác nhau của -n và -c với các cờ quan trọng để tăng dần tải trên máy chủ web của bạn.
Bạn chủ yếu nên tập trung vào cách các chỉ số sau thay đổi khi bạn tăng tải -
- Yêu cầu mỗi giây
- Thời gian kết nối (mili giây)
- Phần trăm yêu cầu được phân phát trong một thời gian nhất định (mili giây)
Bạn cũng nên lưu ý giá trị ngưỡng khi máy chủ bắt đầu gặp khó khăn và bạn bắt đầu nhận được yêu cầu không thành công.
1 người dùng đồng thời thực hiện 100 lần truy cập trang
Hãy để chúng tôi thực hiện 100 lần tải trang tuần tự bởi một người dùng -
$ ab -l -r -n 100 -c 1 -k -H "Accept-Encoding: gzip, deflate" 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: Variable
Concurrency Level: 1
Time taken for tests: 0.045 seconds
Complete requests: 100
Failed requests: 0
Non-2xx responses: 100
Keep-Alive requests: 0
Total transferred: 27700 bytes
HTML transferred: 6600 bytes
Requests per second: 2206.24 [#/sec] (mean)
Time per request: 0.453 [ms] (mean)
Time per request: 0.453 [ms] (mean, across all concurrent requests)
Transfer rate: 596.80 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 0 0 0.0 0 0
Waiting: 0 0 0.0 0 0
Total: 0 0 0.0 0 1
Percentage of the requests served within a certain time (ms)
50% 0
66% 0
75% 0
80% 0
90% 1
95% 1
98% 1
99% 1
100% 1 (longest request)
5 người dùng đồng thời, mỗi người thực hiện 10 lần truy cập trang
Trường hợp này tương ứng với tải cao nhất trên một trang web nhận được khoảng hơn 50.000 lượt truy cập mỗi tháng.
$ ab -l -r -n 10 -c 5 -k -H "Accept-Encoding: gzip, deflate" http://127.0.0.1:8000/
Trong các kết quả đầu ra tiếp theo sau, chúng tôi sẽ bỏ qua tiêu đề chung cho mục đích rõ ràng.
Đầu ra
...
Requests per second: 2009.24 [#/sec] (mean)
Time per request: 2.488 [ms] (mean)
Time per request: 0.498 [ms] (mean, across all concurrent requests)
Transfer rate: 543.52 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 0.5 1 2
Processing: 0 1 0.5 1 2
Waiting: 0 1 0.5 1 1
Total: 2 2 0.4 3 3
ERROR: The median and mean for the total time are more than twice the standard
deviation apart. These results are NOT reliable.
Percentage of the requests served within a certain time (ms)
50% 3
66% 3
75% 3
80% 3
90% 3
95% 3
98% 3
99% 3
100% 3 (longest request)
10 người dùng đồng thời, mỗi người thực hiện 10 lần truy cập trang
Thử nghiệm này tương ứng với 100 lần tải trang của 10 người dùng đồng thời khác nhau, mỗi người dùng thực hiện 10 lần tải trang tuần tự.
$ ab -r -n 10 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://127.0.0.1:8000/
Đầu ra
...
Requests per second: 2225.68 [#/sec] (mean)
Time per request: 4.493 [ms] (mean)
Time per request: 0.449 [ms] (mean, across all concurrent requests)
Transfer rate: 602.07 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 2 0.7 2 3
Processing: 0 2 1.0 2 3
Waiting: 0 1 1.0 2 3
Total: 4 4 0.3 4 4
WARNING: The median and mean for the waiting time are not within a normal deviation
These results are probably not that reliable.
Percentage of the requests served within a certain time (ms)
50% 4
66% 4
75% 4
80% 4
90% 4
95% 4
98% 4
99% 4
100% 4 (longest request)
20 người dùng đồng thời, mỗi người thực hiện 20 lần truy cập trang
Thử nghiệm này tương ứng với 400 lần tải trang của 20 người dùng đồng thời khác nhau, mỗi người dùng thực hiện 20 lần tải trang tuần tự.
$ ab -r -n 20 -c 20 -k -H “Accept-Encoding: gzip, deflate” http://127.0.0.1:8000/
Đầu ra
...
Requests per second: 1619.96 [#/sec] (mean)
Time per request: 12.346 [ms] (mean)
Time per request: 0.617 [ms] (mean, across all concurrent requests)
Transfer rate: 438.21 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 2 6 2.3 6 10
Processing: 1 5 2.9 5 10
Waiting: 0 5 2.9 5 9
Total: 10 11 0.6 11 12
Percentage of the requests served within a certain time (ms)
50% 11
66% 11
75% 12
80% 12
90% 12
95% 12
98% 12
99% 12
100% 12 (longest request)
30 người dùng đồng thời, mỗi người thực hiện 30 lần truy cập trang
Thử nghiệm này tương ứng với 900 lượt tải trang bởi 30 người dùng đồng thời khác nhau, mỗi người dùng thực hiện 30 lượt tải trang tuần tự.
$ ab -r -n 30 -c 30 -k -H "Accept-Encoding: gzip, deflate" http://127.0.0.1:8000/
Đầu ra
...
Requests per second: 2283.45 [#/sec] (mean)
Time per request: 13.138 [ms] (mean)
Time per request: 0.438 [ms] (mean, across all concurrent requests)
Transfer rate: 617.69 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 2 6 2.7 6 11
Processing: 1 6 3.1 6 11
Waiting: 0 5 3.2 5 10
Total: 11 12 0.5 12 13
Percentage of the requests served within a certain time (ms)
50% 12
66% 12
75% 12
80% 12
90% 13
95% 13
98% 13
99% 13
100% 13 (longest request)
Bây giờ chúng tôi đã học cách tăng tải dần dần trên trang web và kiểm tra hiệu suất của nó.
Trong chương này, chúng ta sẽ so sánh các kết quả đầu ra có và không có cờ. Hãy để chúng tôi xem việc sử dụng cờ thích hợp có thể tăng hiệu suất của ứng dụng web của bạn như thế nào. Trước đó, chúng tôi cần hiểu làm thế nào nếu ứng dụng của bạn đơn giản thì bạn có thể không nhận thấy sự khác biệt. Như trường hợp của ứng dụng đơn giản của chúng tôi, có cờ và không có cờ. Sau đó, chúng tôi sẽ thực hiện thử nghiệm tương tự vớihttps://www.apache.org/ URL và xem sự khác biệt.
Kiểm tra ứng dụng của chúng tôi mà không có cờ
Trong phần này, chúng ta sẽ hiểu cách kiểm tra ứng dụng của mình mà không có cờ.
$ ab -n 100 -c 10 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: Variable
Concurrency Level: 10
Time taken for tests: 0.244 seconds
Complete requests: 100
Failed requests: 0
Non-2xx responses: 100
Keep-Alive requests: 0
Total transferred: 27700 bytes
HTML transferred: 6600 bytes
Requests per second: 2208.77 [#/sec] (mean)
Time per request: 4.527 [ms] (mean)
Time per request: 0.453 [ms] (mean, across all concurrent requests)
Transfer rate: 597.49 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 2 0.7 2 3
Processing: 0 2 0.7 2 4
Waiting: 0 2 1.0 2 3
Total: 4 4 0.3 4 5
Percentage of the requests served within a certain time (ms)
50% 4
66% 4
75% 5
80% 5
90% 5
95% 5
98% 5
99% 5
100% 5 (longest request)
Kiểm tra ứng dụng của chúng tôi với Cờ
Trong phần này, chúng ta sẽ hiểu cách kiểm tra ứng dụng của chúng ta với các cờ.
$ ab -l -r -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://127.0.0.1:8000/
Đầu ra
...
Requests per second: 2277.07 [#/sec] (mean)
Time per request: 4.392 [ms] (mean)
Time per request: 0.439 [ms] (mean, across all concurrent requests)
Transfer rate: 615.97 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 2 0.7 2 3
Processing: 0 2 0.7 2 4
Waiting: 0 2 1.0 2 3
Total: 4 4 0.2 4 5
Percentage of the requests served within a certain time (ms)
50% 4
66% 4
75% 4
80% 4
90% 5
95% 5
98% 5
99% 5
100% 5 (longest request)
Chúng ta chỉ có thể lưu ý rằng không có nhiều sự khác biệt giữa các thống kê đầu ra.
Kiểm tra trang web của tổ chức Apache mà không có cờ
Bây giờ chúng ta hãy xem cách kiểm tra Trang web của Tổ chức Apache không có cờ.
$ ab -n 100 -c 10 http://www.apache.org/
Đầ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 www.apache.org (be patient).....done
Server Software: Apache/2.4.7
Server Hostname: www.apache.org
Server Port: 80
Document Path: /
Document Length: 58433 bytes
Concurrency Level: 10
Time taken for tests: 1.498 seconds
Complete requests: 100
Failed requests: 0
Total transferred: 5877500 bytes
HTML transferred: 5843300 bytes
Requests per second: 66.74 [#/sec] (mean)
Time per request: 149.840 [ms] (mean)
Time per request: 14.984 [ms] (mean, across all concurrent requests)
Transfer rate: 3830.58 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 12 110 295.2 12 1012
Processing: 37 38 0.5 38 39
Waiting: 12 13 0.3 13 15
Total: 49 147 295.4 50 1051
Percentage of the requests served within a certain time (ms)
50% 50
66% 50
75% 50
80% 50
90% 816
95% 1050
98% 1051
99% 1051
100% 1051 (longest request)
Kiểm tra trang web của tổ chức Apache với cờ
Bây giờ chúng ta hãy kiểm tra Trang web của Tổ chức Apache bằng Cờ.
$ ab -l -r -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://www.apache.org/
Đầu ra
...
Document Length: Variable
Concurrency Level: 10
Time taken for tests: 0.357 seconds
Complete requests: 100
Failed requests: 0
Keep-Alive requests: 100
Total transferred: 1358510 bytes
HTML transferred: 1317700 bytes
Requests per second: 280.28 [#/sec] (mean)
Time per request: 35.678 [ms] (mean)
Time per request: 3.568 [ms] (mean, across all concurrent requests)
Transfer rate: 3718.41 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 3.7 0 12
Processing: 14 17 21.3 15 227
Waiting: 14 17 21.3 14 227
Total: 14 18 21.5 15 227
Percentage of the requests served within a certain time (ms)
50% 15
66% 15
75% 15
80% 15
90% 27
95% 28
98% 29
99% 227
100% 227 (longest request)
Bạn có thể chỉ cần lưu ý cách yêu cầu mỗi giây tăng lên khi sử dụng cờ. Trong trường hợp tức thời, nó đặc biệt là do sử dụng-H "Accept-Encoding: gzip, deflate vì cờ này yêu cầu máy chủ Apache phân phát các yêu cầu trong gzipped định dạng.
Xem xét kết quả của Apache Bench
Một số điểm quan trọng cần được xem xét khi nói đến kết quả Apache Bench. Điều này sẽ giúp chúng tôi thiết kế chiến lược tổng thể để loại bỏ các nút thắt trong ứng dụng và cải thiện hiệu suất của ứng dụng.
Chúng tôi cần yêu cầu mỗi giây. Điều này cho chúng tôi một ý tưởng về cách thiết lập máy chủ web của chúng tôi đang hoạt động; số càng lớn thì hiệu suất càng tốt. Sau đó đến Thời gian kết nối (mili giây) và Phần trăm yêu cầu được phục vụ. Bạn có thể phải điều chỉnh cài đặt của máy chủ web của mình để thay đổi các chỉ số này thành hiệu suất mong muốn của bạn.
Kiểm tra xem có lỗi trong nhật ký lỗi của Apache hoặc máy chủ web đã sử dụng hoặc nhật ký (chung) hay không. Khi bạn tăng tải, mọi thứ sẽ bắt đầu nghẹt thở: các vấn đề về bộ nhớ sẽ bắt đầu xuất hiện. Rất nhiều tập lệnh python sẽ bắt đầu gặp sự cố nếu chúng không được viết với tính chất đồng thời.
Bạn cần tìm hiểu giá trị đồng thời quan trọng mà trên đó máy chủ web của bạn gặp sự cố và / hoặc hết thời gian là gì? Thông thường điều này sẽ xảy ra ở mức đồng thời khá cao. Nếu giá trị này thấp, có gì đó không ổn và bạn cần điều chỉnh các cài đặt này thấp hơn / cao hơn.
Phần kết luận
Trong hướng dẫn này, chúng ta đã tìm hiểu cách Apache Bench có thể được sử dụng để tải thử nghiệm bất kỳ trang web hoặc ứng dụng web nào. Apache Bench có thể là một công cụ rất có giá trị để xác định cách thiết lập máy chủ ứng dụng web của bạn nên được cải thiện, nhằm giảm tắc nghẽn và tăng hiệu suất. Bây giờ bạn đã quen với cách sử dụng cơ bản của Apache Bench, bạn có thể bắt đầu bằng cách tạo các kế hoạch thử nghiệm mới để đo hiệu suất của các ứng dụng của bạn trong các tình huống khác nhau.