後臺性能測試不可不知的二三事
阿新 • • 發佈:2017-05-12
報告 空間 bold 返回 定義 需求 加鎖 交互 posit 某月黑風高之夜,某打車平臺上線了一大波(G+)優惠活動,眾人紛紛下單。於是乎,該打車平臺使用的智能提示服務扛不住直接趴窩了(如下圖)。事後,負責智能提示服務開發和運維的有關部門開會後決定:必須對智能提示服務進行一次全面深入的性能摸底,立刻!現在!馬上!
那麽一大坨問題就迎面而來:對於智能提示這樣的後臺服務,性能測試過程中應該關心那些指標?這些指標代表什麽含義?這些指標的通過標準是什麽?下面將為您一一解答。
概述
不同人群關註的性能指標各有側重。後臺服務接口的調用者一般只關心吞吐量、響應時間等外部指標。後臺服務的所有者不僅僅關註外部指標,還會關註CPU、內存、負載等內部指標。
拿某打車平臺來說,它所關心的是智能提示的外部指標能不能抗住因大波優惠所導致的流量激增。而對於智能提示服務的開發、運維、測試人員,不僅僅關註外部指標,還會關註CPU、內存、IO等內部指標,以及部署方式、服務器軟硬件配置等運維相關事項。
外部指標
從外部看,性能測試主要關註如下三個指標
- 吞吐量:每秒鐘系統能夠處理的請求數、任務數。
- 響應時間:服務處理一個請求或一個任務的耗時。
- 錯誤率:一批請求中結果出錯的請求所占比例。
- 吞吐量越大,響應時間越長。
- 服務器硬件配置越高,吞吐量越大。
- 網絡越差,吞吐量越小。
- us:用戶態使用的cpu時間百分比
- sy:系統態使用的cpu時間百分比
- ni:用做nice加權的進程分配的用戶態cpu時間百分比
- id:空閑的cpu時間百分比
- wa:cpu等待IO完成時間百分比
- hi:硬中斷消耗時間百分比
- si:軟中斷消耗時間百分比
- VIRT:進程所使用的虛擬內存的總數。它包括所有的代碼,數據和共享庫,加上已換出的頁面,所有已申請的總內存空間
- RES:進程正在使用的沒有交換的物理內存(棧、堆),申請內存後該內存段已被重新賦值
- SHR:進程使用共享內存的總數。該數值只是反映可能與其它進程共享的內存,不代表這段內存當前正被其他進程使用
- SWAP:進程使用的虛擬內存中被換出的大小,交換的是已經申請,但沒有使用的空間,包括(棧、堆、共享內存)
- DATA:進程除可執行代碼以外的物理內存總量,即進程棧、堆申請的總空間
- tps:該設備每秒的傳輸次數。“一次傳輸”意思是“一次I/O請求”。多個邏輯請求可能會被合並為“一次I/O請求”。“一次傳輸”請求的大小是未知的
- kB_read/s:每秒從設備(driveexpressed)讀取的數據量,單位為Kilobytes
- kB_wrtn/s:每秒向設備(driveexpressed)寫入的數據量,單位為Kilobytes
- kB_read:讀取的總數據量,單位為Kilobytes
- kB_wrtn:寫入的總數量數據量,單位為Kilobytes
- rrqm/s:每秒這個設備相關的讀取請求有多少被Merge了(當系統調用需要讀取數據的時候,VFS將請求發到各個FS,如果FS發現不同的讀取請求讀取的是相同Block的數據,FS會將這個請求合並Merge)
- wrqm/s:每秒這個設備相關的寫入請求有多少被Merge了
- await:每一個IO請求的處理的平均時間(單位是毫秒)
- %util:在統計時間內所有處理IO時間,除以總共統計時間。例如,如果統計間隔1秒,該設備有0.8秒在處理IO,而0.2秒閑置,那麽該設備的%util = 0.8/1 = 80%,該參數暗示了設備的繁忙程度。
- 吞吐量到上限時系統負載未到閾值:一般是被測服務分配的系統資源過少導致的。測試過程中如果發現此類情況,可以從ulimit、系統開啟的線程數、分配的內存等維度定位問題原因
- CPU的us和sy不高,但wa很高:如果被測服務是磁盤IO密集型型服務,wa高屬於正常現象。但如果不是此類服務,最可能導致wa高的原因有兩個,一是服務對磁盤讀寫的業務邏輯有問題,讀寫頻率過高,寫入數據量過大,如不合理的數據載入策略、log過多等,都有可能導致這種問題。二是服務器內存不足,服務在swap分區不停的換入換出。
- 同一請求的響應時間忽大忽小:在正常吞吐量下發生此問題,可能的原因有兩方面,一是服務對資源的加鎖邏輯有問題,導致處理某些請求過程中花了大量的時間等待資源解鎖;二是Linux本身分配給服務的資源有限,某些請求需要等待其他請求釋放資源後才能繼續執行。
- 內存持續上漲:在吞吐量固定的前提下,如果內存持續上漲,那麽很有可能是被測服務存在明顯的內存泄漏,需要使用valgrind等內存檢查工具進行定位。
- 測試數據:由於智能提示已經在線上運行,本次測試使用智能提示趴窩那天的日誌作為測試數據
- QPS預估:本次測試就是為了找這個數
- 服務器配置:使用與線上軟硬件配置相同的服務器
- CPU
- 服務器負載
- 內存
- 磁盤IO
- 測試結論:包括被測服務最大QPS、響應時間等指標是否達到期望,部署建議等。
- 測試環境描述:包括性能需求、測試用服務器配置、測試數據來源、測試方法等
- 監控指標統計:響應時間統計、QPS、服務器指標統計、進程指標統計。建議最好用圖表來表示統計數據。
後臺性能測試不可不知的二三事