Apache Bench - Thiết lập môi trườ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.

-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 10 đồng thời 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 / thực hiện 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 lần 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ẽ kiểm tra 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 bài kiểm tra 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.