Sử dụng Apache Bench để đánh giá hiệu suất website

Apache Bench, thường được viết tắt là ab, là công cụ dòng lệnh đơn luồng (single-threaded command-line tool) được cung cấp bởi dự án Apache HTTP server. Nó được thiết kết để đánh giá, đo đạc hiệu suất của máy chủ HTTP Apache. Bằng cách mô phỏng nhiều yêu cầu tới máy chủ (simulating multiple requests to a server), Apache Bench đo lường mức độ mà máy chủ của bạn có thể xử lý tải (handle the load). Điều này còn được gọi là stress testing hoặc load testing. Nó giống như một cuộc diễn tập chữa cháy cho website của bạn, để đảm bảo rằng khi lưu lượng truy cập thực sự tăng, máy chủ của bạn có thể xử lý mà không gặp phải quá nhiều khó khăn.


Tầm quan trọng của việc đánh giá hiệu suất

Hãy thử tưởng tượng việc lái xe mà không có đồng hồ đo tốc độ, đo nhiên liệu. Bạn hoàn toàn mù tít về việc bạn đang đi nhanh thế nào, động cơ đang làm việc vất vả ra sao, và còn bao nhiêu xăng để đi tiếp. Đánh giá hiệu suất website của bạn tương tự như việc sử dụng các công cụ này; nó cung cấp cho chúng ta các chỉ số hiệu suất quan trọng (crucial performance). Nó giúp bạn hiểu:

  • Capacity (sức mạnh): Số lượng người ghé thăm mà trang của bạn có thể xử lý trước khi trải nghiệm người dùng giảm sút.
  • Stability (sự ổn định): Hệ thống của bạn hoạt động thế nào ở các mức lưu lượng khác nhau, đặc biệt là các đợt tăng đột biết bất ngờ.
  • Bottlenecks (điểm nghẽn): Phần nào trên hệ thống của bạn (ví dụ database, phần mềm máy chủ, hệ thống mạng) đang là cái làm giới hạn hiệu suất.

Việc đo lường hiệu suất thường xuyên không chỉ là việc chạy theo các con số. Nó đảm bảo rằng trang web của bạn vẫn dễ tiếp cận (accessible), đáng tin cậy (reliable), và tốc độ cao (fast), ngay cả trong những điều kiện khắt khe nhất. Bằng cách làm như vậy, bạn không chỉ làm cho người dùng hiện tại hạnh phúc mà còn tự tin mở rộng quy mô khi cơ sở người dùng của bạn phát triển.


Bước 1 – Cài Apache Bench

Trước khi chúng ta tiến hành đánh giá hiệu suất, chúng ta cần đảm bảo rằng Apache Bench (ab) đã được cài đặt trên hệ thống của mình. Apache Bench thường đi kèm với máy chủ Apache HTTP, nhưng nó có thể được cài đặt độc lập, ngay cả khi bạn không sử dụng Apache trên máy chủ web của bạn. Dưới đây là cách bạn có thể cài Apache Bench trên các hệ điều hành khác nhau:

  • Các bản phân phối dựa trên Debian (Ubuntu & Debian): Apache Bench là một phần của gói apache2-utils. Để cài đặt nó, mở terminal của bạn và chạy dòng lệnh dưới đây:
sudo apt-get update
sudo apt-get install apache2-utils
  • Các bản phân phối dựa trên Red Hat (Fedoram CentOS): Trên các hệ thống dựa trên Red Hat, bạn có thể sử dụng yum hoặc dnf (trên Fedora) để cài Apache Bench như dưới đây:
sudo yum install httpd-tools

Hoặc nếu bạn sử dụng dnf:

sudo dnf install httpd-tools
  • Arch Linux: Với người dùng Arch Linux, Apache Bench có thể được cài bằng cách sử dụng pacman:
sudo pacman -S apache-tools
  • MacOS: Apache Bench được cài đặt sẵn trên nhiều hệ thống máy MacOS. Để kiểm tra xem nó đã được cài chưa, hãy mở terminal của bạn và gõ ab. Nếu nó đã được cài, bạn có thể nhìn thấy thông tin sử dụng cho lệnh. Nếu nó chưa được cài, hoặc bạn muốn cập nhật phiên bản gần nhất, bạn có thể cài đặt nó bằng cách sử dụng homebrew:
brew install homebrew/apache/ab

Bước 2 – Cài đặt môi trường kiểm tra

Trước khi bắt đầu tiến hành đánh giá hiệu suất máy chủ web của bạn với Apache Bench, điều quan trọng là phải thiết lập môi trường thử nghiệm có kiểm soát (controlled test environment). Điều đó đảm bảo rằng các kết quả kiểm tra của bạn là chính xác và nhất quán nhất có thể.

1. Lựa chọn server kiểm tra:

  • Độc lập, cách ly (isolation): Chọn môi trường máy chủ độc lập với lưu lượng truy cập thực để tránh nhiễu cho người dùng thực và có được kết quả nhất quán.
  • Sao chép (replication): Đảm bảo rằng server kiểm tra phản ánh môi trường sản xuất gần nhất có thể, bao gồm cả các khía cạnh như phần cứng, phần mềm và các cấu hình mạng.

2. Những cân nhắc về mạng:

  • Băng thông (bandwith): Kiểm tra mạng của bạn có đủ băng thông hay không. Tình trạng tắc nghẽn mạng có thể làm sai lệch kết quả.
  • Độ trễ (latency): Hãy xem xét độ trễ giữa máy khách (nơi Apache Bench sẽ chạy) và máy chủ kiểm tra. Độ trễ cao có thể ảnh hưởng đến độ chính xác của thời gian kết nối.

3. Giám sát tài nguyên:

  • Tài nguyên máy chủ: Thiết lập giám sát tài nguyên máy chủ (CPU, memory, I/O của ổ đĩa, I/O của mạng) để xác định các điểm nghẽn tiềm năng trong quá trình kiểm tra.
  • Hiệu suất cơ bản: Ghi lại hiệu suất cơ bản của máy chủ khi nó không tải. Điều này sẽ cho bạn một điểm so sánh với các kết quả đánh giá hiệu suất.

Bước 3 – Xác định mục tiêu đánh giá hiệu suất

Mục tiêu rõ ràng sẽ giúp bạn định hướng quá trình đánh giá hiệu suất và cho phép bạn diễn giải kết quả hiệu quả hơn. Ví dụ:

  • Số lượng người dùng đồng thời tối đa (max concurrent users): Xác định số lượng người dùng tối đa mà máy chủ của bạn có thể xử lý đồng thời mà không ảnh hưởng đáng kể đến hiệu suất.
  • Thời gian phản hồi (response times): Thiết lập thời gian phản hồi chấp nhận được cho ứng dụng web của bạn dưới nhiều điều kiện tải khác nhau.
  • Thông lượng (throughput): Quyết định thông lượng (số lượng yêu cầu mỗi giây) mà máy chủ của bạn phải xử lý được.
  • Lưu lượng truy cập cao điểm (peak traffic): Lên kế hoạch kiểm tra các kịch bản lưu lượng truy cập lúc cao điểm để đảm bảo rằng máy chủ web của bạn có thể xử lý lượng tải cao.

Bước 4 – Hiểu rõ các chỉ số đánh giá hiệu suất

Apache Bench cung cấp các chỉ số định lượng hiệu suất máy chủ web của bạn. Dưới đây là bản phân tích một số chỉ số chính mà bạn sẽ gặp phải.

  • Số lượng yêu cầu mỗi giây: Số lượng yêu cầu mà máy chủ có thể xử lý mỗi giây. Giá trị cao chỉ ra hiệu suất tốt hơn và khả năng xử lý traffic tốt hơn của máy chủ.
  • Thời gian cho mỗi yêu cầu: Thời gian trung bình để xử lý một yêu cầu duy nhất. Con số thấp chỉ ra rằng thời gian phản hồi nhanh và máy chủ đang hoạt động tốt.
  • Số lượng yêu cầu đồng thời: Số lượng yêu cầu gửi tới máy chủ cùng một lúc. Chỉ số này giúp hiểu rõ máy chủ xử lý tốt thế nào dưới điều kiện tải đồng thời.
  • Transfer Rate (tốc độ truyền tải): Lượng data được chuyển mỗi giây trong quá trình kiểm tra. Chỉ ra khả năng phân phối nội dung của máy chủ; quan trọng đối với các ứng dụng dùng nhiều băng thông (bandwidth-intensive).
  • Tỷ tệ thành công/lỗi: Tỷ lệ các yêu cầu thành công trên số lượng phản hồi lỗi (ví dụ 404, 500). Tỷ lệ thành công cao là điều hết sức quan trọng cho sự hài lòng và tin cậy từ phía người dùng.

Hiểu rõ các chỉ số này sẽ giúp bạn diễn giải tốt hơn các kết quả trả về từ Apache Bench và xác định xem liệu máy chủ của bạn có đạt được các chỉ số hiệu suất mà bạn thiết lập. Cần nhớ rằng các chỉ số cần phải được xem xét cùng nhau, vì chúng cùng nhau đại diện cho hồ sơ hiệu suất máy chủ của bạn.


Bước 5 – Chạy một kiểm tra đơn giản

Mở terminal để tiến hành. Chọn URL mà bạn muốn benchmark (đánh giá hiệu suất). Nó nên là một trang đại diện cho cách sử dụng thông thường (typical usage).

Đi vào ví dụ, chẳng hạn địa chỉ chúng ta cần kiểm tra là https://example.com. Bạn nhập câu lệnh dưới đây để thực hiện bài test benchmarking đơn giản:

ab -n 100 -c 10 https://example.com/

Câu lệnh này sẽ gửi 100 yêu cầu tới https://example.com với số lượng kết nối đồng thời là 10 yêu cầu tại một thời điểm. Sau khi lệnh được thực thi, Apache Bench sẽ chạy kiểm tra và cung cấp một loạt kết quả đầu ra sau khi hoàn thành. Nó có thể tốn vài giây hoặc vài phút, phụ thuộc vào số lượng yêu cầu và thời gian phản hồi của máy chủ.


Bước 6 – Phân tích kết quả trả về

Sau khi thử nghiệm kết thúc, Apache Bench sẽ hiển thị kết quả. Dưới đây là ví dụ kết quả đầu ra đã được cắt bớt:

Document Path:          /
Document Length:        108 bytes

Concurrency Level:      10
Time taken for tests:   12.905 seconds
Complete requests:      100
Failed requests:        0
Non-2xx responses:      100
Total transferred:      29500 bytes
HTML transferred:       10800 bytes
Requests per second:    7.75 [#/sec] (mean)
Time per request:       1290.527 [ms] (mean)
Time per request:       129.053 [ms] (mean, across all concurrent requests)
Transfer rate:          2.23 [Kbytes/sec] received

Connection Times (ms)
                      min  mean[+/-sd] median   max
Connect:      645   757 109.5        740          1401
Processing:   173   219 205.1        200         2246
Waiting:        172    218 205.1       196           2246
Total:             834   976 227.1       929          2939

Percentage of the requests served within a certain time (ms)
  50%    929
  66%    973
  75%    988
  80%    988
  90%   1022
  95%   1069
  98%   1622
  99%   2939
 100%   2939 (longest request)

Kết quả trả về từ Apache Bench cung cấp một số chỉ số quan trọng giúp bạn hiểu hiệu suất của website. Dưới đây là bảng phân tích các chỉ số chính từ kết quả trên:

Concurrency LevelĐây là số lượng các yêu cầu đồng thời mà công cụ cố gắng thực hiện cùng một lúc. Trong ví dụ trên, đó là 10.
Time taken for testsĐây là tổng thời gian cần để thực hiện tất cả các yêu cầu, ở đây là 12,905 giây.
Complete requestsThông tin này chỉ ra tổng số lượng yêu cầu HTTP hoàn tất thành công trong quá trình tiến hành benchmarking. Ví dụ này có 100 yêu cầu hoàn tất, điều này có nghĩa là tất cả các yêu cầu được lên kết hoạch đã được hoàn tất mà không bị chấm dứt sớm.
Failed requestsĐiều này cho thấy số lượng yêu cầu không thành công do lỗi mạng, timeout hoặc lỗi máy chủ. Ví dụ này có 0 yêu cầu bị lỗi, điều này dĩ nhiên là lý tưởng.
Non-2xx responsesCái này đại diện cho số lượng yêu cầu thành công, cái trả về mã trạng thái (status code) nằm ngoài dải 2xx, cái thông thường chỉ ra rằng đã thành công. Trong trường hợp này, nó có 100 phản hồi không phải 2xx (non-2xx), điều đó cho thấy mặc dù các yêu cầu đã hoàn tất, chúng không trả về mã trạng thái HTTP thành công (ví dụ 200). Điều này có thể chỉ ra lỗi client (4xx) hoặc lỗi máy chủ (5xx).
Total transferredĐây là tổng số byte trong quá trình thử nghiệm. Quá trình thử nghiệm đã chuyển 29500 byte.
HTML transferredĐây là tổng số nội dung HTML đã được chuyển. Trong ví dụ kiểm tra, có 10800 byte HTML.
Requests per secondĐây là con số trung bình bao nhiêu yêu cầu mỗi giây mà máy chủ có thể xử lý. Trong kết quả ví dụ, có 7,75 yêu cầu mỗi giây. Điều này đo lường thông lượng của máy chủ.
Time per request (mean)Đây là thời gian trung bình cần thiết cho mỗi yêu cầu khi xem xét mức độ đồng thời. Thời gian trung bình cho mỗi yêu cầu là 1290,527 millisecond (ms). Chỉ số này hữu ích để hiểu đỗ trễ của từng yêu cầu riêng lẻ.
Time per request (mean,
across all concurrent requests)
Đây là thời gian trung bình để xử lý mỗi yêu cầu, chia cho mức độ đồng thời. Đây là biểu thị của độ trễ từ quan điểm của khách hàng. Trong ví dụ trên, con số này là 129,053 ms, là sự phản ánh chính xác hơn trải nghiệm của người dùng dưới điều kiện lưu lượng truy cập cao.
Transfer rateĐây là tốc độ mà dữ liệu được vận chuyển từ máy chủ tới máy khách, được đo bằng kilobyte mỗi giây. Ví dụ kiểm tra cho thấy tốc độ chuyển dữ liệu là 2,23 Kbyte/giây.

Từ các số liệu này, bạn có thể suy ra rằng máy chủ đang phản hồi khá chậm (như được chỉ ra bằng thời gian cao cho mỗi yêu cầu), và mọi yêu cầu đều là trạng thái non-2xx, điều này có nghĩa là có một vấn đề với cấu hình máy chủ hoặc tài nguyên đang được truy cập gây ra lỗi. Tốc độ truyền tải dữ liệu (transfer rate) thấp có thể cho thấy mạng hoặc máy chủ có vấn đề về hiệu suất. Những phần này sẽ cần tìm hiểu thêm để chẩn đoán và giải quyết mọi sự cố.


Bước 7 – Người dùng nâng cao và Các thực hành tốt nhất

  • Kiểm tra các yêu cầu đồng thời

Thực hiện kiểm tra các yêu cầu đồng thời là điều kiện cần thiết để hiểu cách máy chủ web xử lý dưới điều kiện áp lực cao, nó mô phỏng việc nhiều người dùng đồng thời truy cập website của bạn.

1. Cú pháp của câu lệnh: Cờ -c trong Apache Bench được dùng để thiết lập mức độ đồng thời. Cú pháp trông giống thế này:

ab -c <số lượng người dùng đồng thời> https://example.com/

2. Ví dụ: Để 100 người dùng đồng thời truy cập vào máy chủ của bạn tại cùng một thời điểm, bạn sẽ dùng cú pháp:

ab -c 100 https://example.com

3. Theo dõi tài nguyên máy chủ: Trong khi kiểm tra chạy, theo dõi tài nguyên máy chủ sử dụng các công cụ như top trong Linux để đảm bảo máy chủ không bị quá tải.

-*-

  • Kiểm tra kéo dài

Kiểm tra kéo dài liên quan đến việc benchmark trong một thời gian dài để xác định leak bộ nhớ hoặc suy giảm hiệu suất theo thời gian.

1. Cú pháp của câu lệnh: Sử dụng cờ -t để chạy kiểm tra chỉ định một số lượng giây cụ thể. Câu lệnh dưới đây sẽ chạy kiểm tra trong 10 phút, ví dụ:

ab -t 600 https://example.com/

2. Ví dụ: Kết hợp với tính đồng thời để mô phỏng tình huống thực tế trong thế giới thực:

ab -c 100 -t 600 https://example.com/

-*-

  • Kiểm tra với các phương thức HTTP khác nhau

Hiểu các phương thức HTTP

  • GET: Phương thức mặc định để lấy dữ liệu từ máy chủ.
  • POST: Được sử dụng để gửi dữ liệu cần xử lý tời một tài nguyên cụ thể.

Cách để kiểm tra với phương thức POST

  1. Chuẩn bị dữ liệu gửi: Tạo một file có chứa data cần gửi.
  2. Cú pháp câu lệnh: Sử dụng cờ -p để chỉ định file dữ liệu và cờ -T để thiết lập kiểu nội dung.
  3. Ví dụ:
ab -p postdata.txt -T application/x-www-form-urlencoded

Bước 8 – Điều chỉnh sau khi có kết quả Bench

Sau khi chạy Apache Bench, bạn có thể xác định được các điểm nghẽn bằng cách nhìn vào:

  • Cần nhiều thời gian cho mỗi yêu cầu: Điều này có thể chỉ ra quá trình xử lý chậm hoặc hạn chế của tài nguyên máy chủ.
  • Chỉ xử lý được ít yêu cầu mỗi giây: Điều này có thể gợi ý là máy chủ của bạn chưa được tối ưu để xử lý tải có lưu lượng truy cập cao một cách hiệu quả.
  • Phân phối mạnh về tỷ lệ phần trăm yêu cầu được phục vụ trong một khoảng thời gian nhất định: Nếu nhiều yêu cầu cần nhiều thời gian hơn để phục vụ, điều này chỉ ra hiệu suất máy chủ không nhất quán.

Vì thế bạn có thể đưa ra quyết định để tăng hiệu suất máy chủ, ví dụ:

  • Cấu hình lại máy chủ: Điều chỉnh cấu hình dựa trên hiệu suất. Ví dụ, bạn có thể cần điều chỉnh lại các thông số như KeepAlive hoặc MaxClients.
  • Mở rộng: Xác định xem phần cứng máy chủ của bạn có thể xử lý được load tải đỉnh (peak load) hay không hoặc là khi bạn cần mở rộng hoặc thu hẹp quy mô.
  • Tối ưu hóa: Chỉ ra các đoạn mã có hiệu suất chậm hoặc các query database cần tối ưu hóa.

Kết luận

Thông qua hướng dẫn này, bạn đã học được cách cài Apache Bench, thực hiện các bài kiểm tra benchmarking cơ bản và nâng cao, giải thích kết quả, và đưa ra quyết định sáng suốt để tối ưu hóa máy chủ của bạn. Đánh giá hiệu suất là quá trình lặp đi lặp lại (iterative process). Khuyến khích bản thân liên tục theo dõi hiệu suất của trang web và trải nghiệm các cấu hình khác nhau. Luôn cập nhật các công nghệ & công cụ tối ưu hóa mới để giữ kỹ năng của bạn sắc bén giúp cho website chạy mượt mà. Cần phải nhớ rằng, hiệu suất website tốt đem lại trải nghiệm người dùng tốt hơn, cái có thể dẫn tới gia tăng sự hài lòng & cải thiện khả năng giữ chân khách hàng. Tiếp tục mở rộng hơn nữa ranh giới hiệu suất website của bạn!

(Lược dịch dựa trên bài viết: Website Performance Benchmarking Using Apache Bench của Faleddo, đăng trên trang cộng đồng của Hetzner)

Viết một bình luận