首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

Apache ab 壓力測試工具完整使用指南

     編輯:MySQL 綜合教學

Apache ab 壓力測試工具完整使用指南

工具簡介

ab (ApacheBench) 是 Apache HTTP Server 附帶的效能測試工具,用於測量 HTTP 伺服器每秒可處理的請求數(QPS/TPS)。

安裝與驗證

# CentOS/RHEL
yum install httpd-tools

# Ubuntu/Debian
apt-get install apache2-utils

# 驗證
ab -V
# This is ApacheBench, Version 2.3 <$Revision: 1879490 $>

核心參數詳解

參數說明範例
-n總請求數-n 10000
-c並發數(同時連線數)-c 100
-t最大測試時間(秒),與 -n 二擇一-t 60
-k啟用 HTTP KeepAlive-k
-H自定義 Header-H "Authorization: Bearer xxx"
-pPOST 資料檔案-p post.json
-TContent-Type-T "application/json"
-v輸出詳細度(1-4)-v 2
-sSSL/TLS 連線(需 openssl 支援)-s

實戰範例

基礎 GET 請求測試

ab -n 10000 -c 100 https://127.0.0.1:8080/api/health

POST JSON API 測試

# 建立 post.json
cat > post.json <<'EOF'
{"user_id": 123, "action": "login"}
EOF

# 執行測試
ab -n 5000 -c 50 -p post.json -T "application/json" \
   -H "X-API-Key: test-key" \
   https://127.0.0.1:8080/api/action

KeepAlive 長連線測試

ab -n 10000 -c 100 -k https://127.0.0.1:8080/

輸出結果解讀

Server Software:        nginx/1.18.0
Server Hostname:        127.0.0.1
Server Port:            8080

Document Path:          /api/health
Document Length:        25 bytes

Concurrency Level:      100          # 並發數
Time taken for tests:   2.345 seconds # 總耗時
Complete requests:      10000        # 成功請求數
Failed requests:        0            # 失敗請求數
Total transferred:      2,450,000    # 總傳輸位元組(含 Header)
HTML transferred:       250,000      # Body 傳輸位元組
Requests per second:    4264.39 [#/sec] (mean)  # ★ QPS 核心指標
Time per request:       23.450 [ms] (mean)     # 平均延遲(含並發)
Time per request:       0.235 [ms] (mean, across all concurrent requests) # 單請求處理時間
Transfer rate:          1020.56 [Kbytes/sec] received  # 頻寬

關鍵指標深度解析

指標公式業務含義關注重點
QPS (RPS)Complete requests / Time taken系統吞吐能力越高越好,對比基準值
平均延遲Time per request (mean)用戶感知響應速度通常關注 P99/P999
錯誤率Failed / Complete系統穩定性應為 0%
頻寬利用Transfer rate網路資源消耗對比網卡上限

進階分析:取得延遲分佈

ab 原生不支援百分位數,可搭配 gnuplot 輸出:

ab -n 10000 -c 100 -g gnuplot.dat https://target/
# gnuplot.dat 可用 gnuplot 或 Python pandas 繪製延遲分佈圖

常見誤區與最佳實踐

  • ❌ 在目標伺服器上跑 ab → 爭搶 CPU/網路,結果失真 → 專用壓測機
  • ❌ -c 設過大(如 10000) → 客戶端資源耗盡 → 分階段遞增 (10, 50, 100, 200...)
  • ❌ 忽略 預熱 → 首輪請求慢(JIT 編譯、連線池建立) → 先跑 1-2 分鐘暖機
  • ❌ 單一 URL 測試 → 無法反映真實業務混合負載 → 混合場景腳本
  • ✅ 監控目標機 CPU、記憶體、磁碟 I/O、網路、GC、資料庫連線池
  • ✅ 記錄完整參數、環境、版本,便於複現與對比

替代工具推薦

工具特點適用場景
wrkLua 腳本、高效能、支援百分位現代 HTTP/1.1、HTTP/2 壓測首選
locustPython 腳本、分散式、Web UI複雜業務邏輯、CI/CD 整合
JMeterGUI、協議豐富、企業級非 HTTP 協議、團隊協作
k6Go/JS、雲原生、Grafana 整合K8s 環境、持續效能測試
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved