在Grafana k6中,??Stage(階段)?? 是負載測試腳本的核心配置概念,用于動態控制虛擬用戶(VUs)的數量隨時間的變化。通過定義多個階段,用戶可以模擬真實場景中的流量波動(如用戶逐步增加、峰值維持、平滑退出等),從而更精準地評估系統在不同負載下的性能表現。以下是詳細解析:
一、Stage的核心作用
- ??動態負載模擬??
每個Stage定義了??目標虛擬用戶數(target
)?? 和??持續時間(duration
)??。例如:
? ??stages: [{ duration: '30s', target: 100 }, // 30秒內從0逐步增加到100個VU{ duration: '5m', target: 100 }, ?// 維持100個VU持續5分鐘{ duration: '10s', target: 0 } ? ?// 10秒內從100降至0個VU
]
這種配置避免了瞬時高并發導致的系統崩潰,更貼近真實用戶訪問模式。
- ??性能瓶頸識別??
通過分階段加壓,可觀察系統在負載逐步上升時的響應時間、錯誤率等指標變化,定位性能拐點(如CPU瓶頸、數據庫連接池耗盡)。
二、Stage的配置參數
??參數?? | ??說明?? | ??示例值?? |
---|---|---|
target | 階段結束時需達到的虛擬用戶數 | 100 、500 |
duration | 階段的持續時間(支持s 秒、m 分鐘、h 小時) | "30s" 、"5m" |
gracefulStop | (可選)階段結束時的優雅停止時間,用于等待剩余請求完成 | "10s" |
??注??:若未配置
stages
,k6默認使用固定VU數(通過vus
和duration
指定)。
三、典型應用場景
??漸進式負載測試(Ramp-up)?
stages: [{ duration: '1m', target: 50 }, // 熱身階段:緩慢加壓{ duration: '3m', target: 200 }, // 主壓力階段:持續高負載{ duration: '30s', target: 0 } // 恢復階段:平滑退出 ]
用途??:模擬用戶登錄早高峰、促銷活動流量。
??壓力測試(Stress Testing)??
stages: [ { duration: '2m', target: 1000 } // 快速達到極限并發 ]
??用途??:測試系統最大承載能力,觸發熔斷或降級機制。
??穩定性測試(Soak Testing)??
stages: [
{ duration: '10m', target: 100 },
{ duration: '8h', target: 100 } // 長時間穩定負載
]
??用途??:檢測內存泄漏、資源緩慢耗盡問題。
?四、最佳實踐與注意事項
??避免瞬時壓力??
直接啟動大量VU可能導致請求突增(如vus: 1000, duration: '1s'
),引發系統拒絕服務。應通過stages
分階段增加負載。??結合其他配置項??
- 與
rps
(每秒請求數)配合,精確控制吞吐量:
export const options = { stages: [...], rps: 100 // 限制每秒最大請求數 };
- 使用
thresholds
(閾值)定義性能達標標準:thresholds: { http_req_duration: ['p(95) < 500'], // 95%請求延遲需<500mshttp_req_failed: ['rate<0.01'] // 錯誤率<1% }
- ??考慮系統預熱時間??
在正式加壓前增加低負載階段(如{target: 10, duration: '1m'}
),避免冷啟動影響(如JVM編譯優化、數據庫緩存預熱)。
五、完整示例腳本
import http from 'k6/http';
import { check } from 'k6';export const options = {stages: [{ duration: '30s', target: 50 },{ duration: '1m', target: 200 },{ duration: '20s', target: 0 },],thresholds: {http_req_duration: ['p(95) < 1000'],},
};export default function () {const res = http.get('https://api.example.com/data');check(res, {'status is 200': (r) => r.status === 200,});
}
?六、結果分析要點
通過stages
生成的測試報告中,需重點關注:
- ??各階段的關鍵指標對比??:如
http_req_duration
在加壓階段是否陡增。 - ??錯誤率變化??:高負載階段是否出現錯誤率峰值(如
http_req_failed
)。 - ??資源利用率關聯??:結合Grafana監控(如CPU、內存),分析系統資源與負載的關聯性。