HomeOur Team
Performance Testing với Apache Bench
Solutions
Performance Testing với Apache Bench
hai.nguyen
hai.nguyen
October 26, 2020
1 min

Apache Benchmark (ab) là một công cụ miễn phí do Apache phát triển, giúp chúng ta giả lập các kết nối để kiểm tra khả năng chịu tải của website.

Thông thường thì công cụ Apache Benchmark sẽ được cài sẵn khi chúng ta cài đặt Apache trên server của mình, chúng ta có thể chạy lệnh sau để kiểm tra xem có Apache Benchmark đã có hay chưa:

ab -V

Nếu xuất hiện thông báo như sau thì Apache Benchmark đã được cài đặt:

Nếu chưa có thì chúng ta có thể cài đặt Apache Benchmark với lệnh sau:

  • CentOS: yum install httpd-tools
  • Ubuntu: apt-get install apache2-utils

2. Cách sử dụng

Apache Benchmark được sử dụng theo cú pháp sau: ab [options] [http[s]://]hostname[:port]/path

Với các option:

-n requests     Tổng số request được tạo
-c concurrency  Số các request chạy cùng một thời điểm
-t timelimit    Số giây tối đa thực hiện benchmark
-s timeout      Số giây tối đa thực hiện một request. Mặc định là 30 giây
-b windowsize   Kích thước của bộ đệm gửi/nhận TCP, tính bằng byte
-p postfile     File chưa nội dung (body) để thực hiện POST request
                Cần phải sử dụng thêm option -T
-u putfile      File chưa nội dung (body) để thực hiện PUT request
                Cần phải sử dụng thêm option -T
-T content-type Content-type header để thực hiện POST/PUT request, ví dụ:
                'application/x-www-form-urlencoded'
                Mặc định là 'text/plain'
-v verbosity    Số chi tiết quá trình thực hiện cần hiển thị. Giá trị từ 2 đến 4
-w              Hiện thị kết quả the dạng HTML tables
-i              Sử dụng HEAD thay vì GET
-x attributes   Thêm attributes vào tag 'table' để hiển thị kết quản dạng HTML tables
-y attributes   Thêm attributes vào tag 'tr' để hiển thị kết quản dạng HTML tables
-z attributes   Thêm attributes vào tag 'td' hoặc 'th' để hiển thị kết quản dạng HTML tables
-C attribute    Thêm cookie, ví du: 'Apache=1234'
                (có thể sử dụng nhiều lần)
-H attribute    Thêm header cho request, ví du: 'Accept-Encoding: gzip'
                (có thể sử dụng nhiều lần)
-A attribute    Thêm xác thực WWW cơ bản, các thuộc tính
                là tên người dùng và mật khẩu được phân tách bằng dấu hai chấm.
-P attribute    Thêm xác thực proxy cơ bản, các thuộc tính
                là tên người dùng và mật khẩu được phân tách bằng dấu hai chấm.
-X proxy:port   Proxyserver và port
-q              Không hiển thị tiến độ khi thực hiện hơn 150 request
-g filename     Xuất kết quả ra tệp định dạng gnuplot
-e filename     Xuất kết quả ra tệp với nội dung CSV
-m method       Method name
-h              Hiển thị thông tin đã sử dụng

3. Ví dụ và giải thích kết quả

Ví dụ 1: Thực hiện 5000 request với mỗi 500 request cùng một thời điểm

  • Command: ab -n 5000 -c 500 http://27.72.29.63:8080/admin/System.do
  • Kết quả:

- Một số thông tin chính trong output như:
    - Tổng 5000 request mất **4.140s**
    - Đã thực hiện 5000 request thành công, 0 request thất bại
    - Trung bình mỗi giây đáp ứng được **1207.63** request
    - Trung bình mỗi request mất **414.034ms**
    - Trung bình mỗi lần thực hiện cho các request cùng thời điểm mất **0.828ms**
- Giải thích ý nghĩa:
    - `Server Software` - Phiển bản hiện thời của Web Server
    - `Server Hostname` - DNS hoặc IP cung cấp cho việc đánh giá, chỉ định port trên command line
    - `Server Port` - Port kết nối tới, nếu không chỉ định port trên command line, giá trị mặc định là 80 cho http hoặc 443 cho https
    - `SSL/TLS Protocol` - Giao thức sử dụng mặc định giữa client và Server, sẽ chỉ xuất hiện nếu sử dụng SSL
    - `Document Path` - Request URI chỉ định Test
    - `Document Length` - Độ dài của phản hồi (HTML, CSS), tính bằng byte. Nếu độ dài của phản hồi thay đổi, kết quả phản hồi được coi là lỗi
    - `Concurrency Level` - Số lượng client đồng thời gửi request
    - `Time taken for tests` - Tổng thời gian test, tính từ request đầu tiên tới request cuối cùng
    - `Complete requests` - Số lượng Request thành công
    - `Failed requests` - Số lượng Request thất bại, nếu có sẽ có mô tả về lỗi
    - `Non-2xx responses` - Số lượng phản hồi không phải status code 200.
    - `Total body sent` - Chỉ quan tâm khi bài test thực hiện hành động POST hoặc PUT tới server
    - `Total transferred` - Tổng số byte nhận được từ server
    - `HTML transferred` - Số lượng byte nhận được (Các file html), kết quả đã loại bỏ số byte trong HTTP header
    - `Requests per second` - Tổng số request thực hiện trong 1s. Tính bằng tổng thời gian chia số lượng request hoàn thành (Time taken for tests / Complete requests)
    - `Time per request` - Thời gian trung bình trên một request.
    - `Transfer rate` - Tốc độ đường truyền (Downloading tại client). Tính bằng: / 1024 /
    - `Connection Times` - Tính bằng ms:
        - `Connect và Waiting times`: Thời gian sử dụng để mở kết nối và nhận kết quả (bit đầu tiên)
        - `Processing times`: Thời gian đợi server xử lý và phản hồi
        - `Total time`: Tổng thời gian xử lý (Connect + Processsing + Waiting)

Ví dụ 2: Thực hiện lần lượt 3 post request với file input chứa các parameter và ghi kết quả ra file dạng gnuplot format

  • Command: ab -v 2 -n 3 -T 'application/x-www-form-urlencoded' -H 'User-Agent: Android/2.8.1.2 SM-N960F/29' -p input.txt -g output.txt http://192.168.100.69:8080/gateway/Account.do?action=getUser-v 2: Xuất ra thông tin request/response chi tiết
  • Nội dung file input.txt

  • Kết quả:

4. Tổng kết:

Hiện nay có nhiều nhiều tool hỗ trực thực hiện perfomance test nhưng theo mình thì Apache Benchmark là một tool rất mạnh mẽ và dễ dàng sử dụng.

Tham khảo Apcache


Tags

#apache#performance#102020
hai.nguyen

hai.nguyen

Developer

Expertise

java

Related Posts

Sign In with Apple - Backend (Java)
Sign In with Apple - Backend (Java)
October 29, 2020
3 min
© 2021, All Rights Reserved.

Quick Links

HomeOur Team

Social Media