轉 美團分享總結:系統性能優化之道

轉 美團分享總結:系統性能優化之道

原文連接: http://mrchenatu.com/2017/02/21/performance-tuning/ ios

典型性能問題

  1. 響應慢:你這個服務, 老是響應超時,儘快解決下!
  2. 單機容量低:就這麼點量, 還要加機器?
  3. 併發能力弱:這個服務併發怎麼上不去呢, 查下爲啥

性能優化方法論

數據驅動

系統診斷

如何選擇工具

性能工具

性能診斷層次

  • 系統層: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()
  • 如何診斷
    • top -bH -p  -n 1 | head -n10
    • stack
    • jstat
    • JProfiler (可以精肯定位,能夠定位到具體代碼消耗多少時間)

      內存

  • 如何識別:mem指標、swap、jvm.gc.count …
  • 如何診斷:
    • jstat
    • jmap
  • 精肯定位:MAT

    網絡

  • 如何識別:net.if.*; TcpExt.ListenOverflows ;
  • 如何診斷:
    • netstat
    • iftop

響應時間慢

下游依賴方

db、緩存、服務算法

同步調用

邏輯實現

  • 循環調用
  • 本地方法耗時過長 Greys能夠分析耗時

併發上不去

  • 資源瓶頸:線程池,鏈接池 (JProfiler檢查線程)
  • 資源競爭:cpu切換,鎖 (線程池併發模型 -> 異步併發模型)

Java 快速診斷性能瓶頸, 首選 JProfiler後端

相關文章
相關標籤/搜索