基礎:
完整的性能測試流程
需求-計劃-方案-環境搭建-用例設計-數據準備-場景設計-腳本開發-腳本執行-結果分析-問題反饋-性能調優-結果報告
性能指標
TPS,QPS,RPS,HPS,RT,VU,ERROR
測試類型
壓力測試,負載測試,併發測試,spike測試,穩定性測試,破壞性測試,驗收測試
工具:html
jmeter工做原理
經常使用的元件,插件
jmeter如何設計腳本(線程組,各類請求,定時器,參數化,關聯,斷言)
jmeter測試報告
jmete設計典型性能測試場景linux
其它工具
wrk,ab,httpload,webbench,siege
服務器/中間件
JVM原理和配置、堆棧原理、GC原理、FullGc,OOM
Tomcat配置、使用方法、啓動參數配置
Nginx配置、使用方法
Dubbo服務註冊、消息隊列
服務器硬件資源
cpu,磁盤,網絡,內存,load和利用率,IO讀寫,發包率丟包率
linux性能監聽命令
lscpu,uptime,free,vmstat,mpstat,sysstat,netstat,iostat,pidstat,jstack,jmap
數據庫
鎖,索引,讀寫分離,分庫分表,Nosql
線程狀態
就緒(Runnable),運行(Running),阻塞(Blocked)
可能的瓶頸點
硬件,中間件,程序,操做系統,網絡設備
cpu,內存,磁盤,網絡,jvm,線程池,jdbc鏈接池
OOM異常信息
OutOfMemoryError: Java heap space (堆內存不夠)
OutOfMemoryError: GC overhead limit exceeded (代碼內存過大或死循環)
OutOfMemoryError: PermGen space (perm內存不夠)
OutOfMemoryError: Direct buffer memory (線程棧過小)ios
性能測試分析
錯誤提示分析
OutOfMemoryError: Java heap space (堆內存不夠)
OutOfMemoryError: GC overhead limit exceeded (代碼內存過大或死循環)
OutOfMemoryError: PermGen space (perm內存不夠)
OutOfMemoryError: Direct buffer memory (線程棧過小)
指標監控分析
cpu瓶頸
響應時間慢
空閒時間高(idle)
系統佔用高(sys)
用戶佔用高(usr)
運行隊列長(r)
load長期大於cpu個數
內存瓶頸
交換率太高(swap)
系統cpu利用率很高
內存溢出(OOM)
磁盤瓶頸
磁盤利用率高
等待隊列過長(avgqu-sz)
等待IO的百分比太高(await))
用於IO的時間比例太高(util)
緩存命中率太低(buffer cache)
JVM瓶頸
fullgc頻繁,考慮老年代內存是否過小
YoungGc頻繁,考慮年輕代內存是否過小
YoungGc時間過長,程序中出現了大對象, 增長 -XX:PretenureSizeThreshold
GC監控
jstat -class 類加載統計
jstat -compiler 編譯統計
jstat -GC 垃圾回收統計
jstat -gccapacity 堆內存統計
jstat -gccnew 年輕代垃圾回收統計
jstat -gccold 老年代垃圾回收統計
jstat -gcnewcapacity 年輕代內存統計
jstat -gcoldcapacity 老年代內存統計
jstat -gcmetacapacity 元空間內存統計
jstat -gcutil gc總體統計
分段排查定位分析
服務器硬件瓶頸->網絡瓶頸->應用瓶頸->服務器操做系統瓶頸(參數配置)->中間件瓶頸(參數配置,數據庫,web服務器等)
優化方法
使用對象池減小對象建立
增長本地緩存
Nosql進行存儲
合併請求
串行改並行
同步改異步web
戳我>>>性能測試實戰分析sql