「有時,刻意練習去分析在環境遇到的效能問題,也是能夠幫助測試工程師更了解產品的行為和架構的一個好方法。」
如何準確找到系統瓶頸,並迅速定位效能問題,是每位測試工程師面臨的重要挑戰。而在開始之前,要先了解 Brendan Gregg 提出的兩個方法論 — The USE Method 和 The TSA Method,提供了系統化的方式來進行效能分析和排除故障。本篇文章將介紹這兩種方法,並討論它們在效能測試中的應用,幫助你快速識別並解決系統的效能問題。
The USE Method,全稱是 Utilization(使用率), Saturation(飽和度), and Errors(錯誤),是一種用來分析系統效能的檢查方法。它的核心目標是通過三個維度來檢查每個系統資源,從而系統化地找出效能瓶頸。
Utilization(使用率):表示某個資源的使用程度,通常以百分比來表達。高使用率表明這個資源可能是系統瓶頸。
Saturation(飽和度):表示資源的需求超過其最大處理能力。資源飽和意味著有任務在排隊等待,通常是導致效能下降的原因。
Errors(錯誤):指的是資源在使用過程中出現的錯誤或失敗。錯誤率的升高會影響系統的穩定性和效能。
The USE Method 的優勢在於,它提供了一個系統化的思路來逐一檢查系統中的每個資源,包括 CPU、記憶體、磁碟、網路、I/O 設備等。通過檢查資源的使用率、飽和度和錯誤率,我們可以快速找出哪些資源是效能問題的來源。
假設你正在測試一個網路應用,並發現其效能變差,你可以按照以下步驟應用 USE Method 進行診斷:
資源 | 使用率 (%) | 飽和度 | 錯誤數量 |
---|---|---|---|
CPU | 85% | 過高 | 0 |
記憶體 | 75% | 正常 | 0 |
磁碟 I/O | 95% | 飽和 | 5 |
網路 | 50% | 正常 | 0 |
檢查 CPU 使用率:查看 CPU 的使用率是否高於 80%,是否出現飽和或過載的情況。
檢查記憶體的使用率和飽和度:檢查記憶體的使用情況,確保系統沒有出現過多的記憶體分配錯誤或記憶體不足的情況。
檢查網路資源:檢查網路設備的飽和度,看是否出現了高延遲或封包遺失現象。
檢查磁碟 I/O:查看磁碟 I/O 操作的飽和度,是否有讀寫延遲過高的情況。
透過這種方式逐一檢查系統的各個資源,你可以快速定位效能瓶頸,然後根據具體情況進行優化。
如果開啟 Mac 上面的 Activity Monitor 會列出各個資源的狀態:
The TSA Method,全稱是 Thread(執行緒)、State(狀態)、Action(行為),是一種用來分析和診斷多執行緒應用效能問題的方法。它側重於多執行緒系統的效能問題,通過檢查每個執行緒的狀態和行為來找出問題根源。
Thread(執行緒):這表示應用中的每個執行緒,它們是多執行緒應用的基本單元。分析執行緒的行為是理解應用效能的第一步。
State(狀態):每個執行緒在任何時間點都有一個特定的狀態,如運行、等待、阻塞等。執行緒長時間處於非運行狀態可能表示效能問題。
Action(行為):這是執行緒當前正在執行的操作,如讀取 I/O、計算任務或等待鎖。通過分析執行緒的行為,我們可以確定哪部分程式耗費了大量的系統資源。
The TSA Method 專注於分析多執行緒應用中的效能問題,適合於檢查大型、並行、分散式系統。通過觀察執行緒的狀態和行為,可以深入了解執行緒的效能瓶頸點。
假設你在測試一個高併發的 Web 應用,發現系統的回應時間很慢,可以按以下步驟應用 TSA Method 來進行效能分析:
時間 | 執行緒 1 | 執行緒 2 | 執行緒 3 |
---|---|---|---|
t1 | 運行 | 等待 | 運行 |
t2 | 阻塞 | 運行 | 等待 |
t3 | 等待 | 阻塞 | 運行 |
檢查執行緒數量:查看系統中運行的執行緒數是否超過了設計的容量,是否出現了執行緒爆炸的情況。
檢查執行緒狀態:查看執行緒是否長時間處於等待或阻塞狀態。長時間等待可能意味著某些資源成為了瓶頸。
分析執行緒的行為:分析每個執行緒正在執行的任務,確定是否有執行緒長時間執行 I/O 操作或 CPU 密集型任務,從而影響整體效能。
這種分析方法可以幫助我們快速找出哪些執行緒可能是系統效能下降的原因,並針對具體的執行緒行為進行優化。
如果開啟 Mac 上面的 Activity Monitor 會列出各個 CPU Process 使用 Threads 的狀態:
這兩種方法都有其特定的應用場景:
The USE Method 適合於針對整個系統資源的全面檢查,特別是在資源瓶頸的識別上有卓越的表現。它適用於系統層面的效能測試,例如 CPU、記憶體、磁碟和網路的檢查。
The TSA Method 更加專注於多執行緒應用的分析,適合於需要深入了解並行程式中的執行緒行為的效能測試。
這兩種方法可以相輔相成。你可以先用 USE Method 來確定系統資源是否有瓶頸,然後進一步用 TSA Method 來分析並行程式的執行緒行為。
效能測試是一個複雜的過程,需要系統性地分析和檢查各個方面的資源利用率和應用行為。通過使用 The USE Method 和 The TSA Method,我們可以有針對性地檢測系統資源的使用情況和多執行緒應用的效能問題。
USE Method 提供了對系統資源(如 CPU、記憶體、磁碟、網路等)的全方位檢查,幫助我們快速找到資源瓶頸。
TSA Method 則專注於分析多執行緒系統中的執行緒狀態和行為,幫助我們找出並解決並行應用中的效能問題。
通常這兩種方法是效能分析的基礎,接下來我們也會透過刻意練習,讓我們熟悉如何使用測試工具、測試分析的能力去實踐效能測試。