典型性能問題
- 響應慢:你這個服務, 老是響應超時,儘快解決下!
- 單機容量低:就這麼點量, 還要加機器?
- 併發能力弱:這個服務併發怎麼上不去呢, 查下爲啥
性能優化方法論
數據驅動
系統診斷
如何選擇工具
性能診斷層次
- 系統層:OS JVM CPU Memory Network Disk | top jstat iftop iostat dstat…
- 組件層:Jetty DB Driver JSON Lib… | JProfiler Mtrace
- 業務層: 業務邏輯 數據結構 算法 | 日誌 Jstack Greys
例子:首頁超時了
- 排查網關問題
- 網絡延遲數據
- 排查後端服務問題
- 從接入層(API層)開始檢查, 首頁調用鏈各個環節的延遲, 負載指標
- 假設其中一個環節(好比POI 服務負載高, 響應異常). 檢查服務器系統指標, OCTO 性能指標, CAT 監控數據, 日誌數據
參考手冊
單機容量上不去
CPU
- 如何識別:load、cpu使用率、 CPU.Steal()
- 如何診斷
- 如何識別:mem指標、swap、jvm.gc.count …
- 如何診斷:
- jstat
- jmap
- 精肯定位:MAT
網絡
- 如何識別:net.if.*; TcpExt.ListenOverflows ;
- 如何診斷:
- netstat
- iftop
響應時間慢
下游依賴方
db、緩存、服務算法
同步調用
邏輯實現
- 循環調用
- 本地方法耗時過長 Greys能夠分析耗時
併發上不去
- 資源瓶頸:線程池,鏈接池 (JProfiler檢查線程)
- 資源競爭:cpu切換,鎖 (線程池併發模型 -> 異步併發模型)
Java 快速診斷性能瓶頸, 首選 JProfiler後端