天天看點

2.4K star,一個高性能、無侵入的Java性能監控和統計工具

作者:Java架構學習指南

背景

随着所在公司的發展,應用服務的規模不斷擴大,原有的垂直應用架構已無法滿足産品的發展,幾十個工程師在一個項目裡并行開發不同的功能,開發效率不斷降低。

于是公司開始全面推進服務化程序,把團隊内的大部分工程師主要精力全部都集中到服務化中。服務化可以讓每個工程師僅在自己負責的子項目中進行開發,提高了開發的效率,但是服務化同時也帶來了其他問題:

  • 無法知道每個服務的運作情況,例如,某一台服務它目前的 QPS 是多少?它的平均延遲是多少,99% 的延遲是多少,99.9% 的延遲又是多少?
  • 某一個接口響應時間慢,如何定位是哪個方法引起的?
  • 每個服務的負載是否均衡?
  • 當服務出現抖動時,如何判斷是 DB、Cache 還是下遊服務引起的?
  • DB 和 Cache 響應延遲是多少?
  • 如何評估服務的容量,随着服務的調用量越來越大,這個服務需要多少機器來支撐?什麼時候應該加機器?
針對以上開發中的煩惱,今天我們介紹一個針對高并發、低延遲應用設計的高性能 Java 性能監控和統計工具——MyPerf4J。

使用場景

  • 在開發環境中快速定位 Java 應用程式的性能瓶頸
  • 在生産環境中長期監控 Java 應用程式的性能名額

特性

  • 高性能: 單線程支援每秒 1000萬次 響應時間的記錄,每次記錄隻花費 73納秒
  • 無侵入: 采用 JavaAgent 方式,對應用程式完全無侵入,無需修改應用代碼
  • 低記憶體: 采用記憶體複用的方式,整個生命周期隻産生極少的臨時對象,不影響應用程式的GC
  • 高精度: 采用納秒來計算響應時間
  • 高實時: 支援秒級監控,最低 1 秒!

監控名額

MyPerf4J 為每個應用收集數十個監控名額,所有的監控名額都是實時采集和展現的。

下面是 MyPerf4J 目前支援的監控名額清單:

Method

RPS,Count,Avg,Min,Max,StdDev,TP50, TP90, TP95, TP99, TP999, TP9999, TP99999, TP100
2.4K star,一個高性能、無侵入的Java性能監控和統計工具

Memory

HeapInit,HeapUsed,HeapCommitted,HeapMax,NonHeapInit,NonHeapUsed,NonHeapCommitted,NonHeapMax
2.4K star,一個高性能、無侵入的Java性能監控和統計工具

JVM GC

CollectCount,CollectTime
2.4K star,一個高性能、無侵入的Java性能監控和統計工具

JVM Class

Total,Loaded,Unloaded
2.4K star,一個高性能、無侵入的Java性能監控和統計工具

快速啟動

MyPerf4J 采用 JavaAgent 配置方式,透明化接入應用,對應用代碼完全沒有侵入。推薦:Java面試題

下載下傳

  • 下載下傳并解壓 MyPerf4J-ASM.zip
  • 閱讀解壓出的 README 檔案
  • 修改解壓出的 MyPerf4J.properties 配置檔案中 app_name、metrics.log.xxx 和 filter.packages.include 的配置值
MyPerf4J-ASM.zip包:https://github.com/LinShunKang/Objects/blob/master/zips/CN/MyPerf4J-ASM-3.3.0-SNAPSHOT.zip?raw=true

配置

在 JVM 啟動參數裡加上以下兩個參數

-javaagent:/path/to/MyPerf4J-ASM.jar
-DMyPerf4JPropFile=/path/to/MyPerf4J.properties           
2.4K star,一個高性能、無侵入的Java性能監控和統計工具

運作

啟動應用,監控日志輸出到 /path/to/log/method_metrics.log:

MyPerf4J Method Metrics [2020-01-01 12:49:57, 2020-01-01 12:49:58]
Method[6]                            Type        Level  TimePercent      RPS  Avg(ms)  Min(ms)  Max(ms)    StdDev    Count     TP50     TP90     TP95     TP99    TP999   TP9999
DemoServiceImpl.getId2(long)      General      Service      322.50%     6524     0.49        0        1     0.50      6524        0        1        1        1        1        1
DemoServiceImpl.getId3(long)      General      Service      296.10%     4350     0.68        0        1     0.47      4350        1        1        1        1        1        1
DemoServiceImpl.getId4(long)      General      Service      164.60%     2176     0.76        0        1     0.43      2176        1        1        1        1        1        1
DemoServiceImpl.getId1(long)      General      Service        0.00%     8704     0.00        0        0     0.00      8704        0        0        0        0        0        0
DemoDAO.getId1(long)         DynamicProxy          DAO        0.00%     2176     0.00        0        0     0.00      2176        0        0        0        0        0        0
DemoDAO.getId2()             DynamicProxy          DAO        0.00%     2176     0.00        0        0     0.00      2176        0        0        0        0        0        0           

解除安裝

在 JVM 啟動參數中去掉以下兩個參數,重新開機即可解除安裝此工具。

-javaagent:/path/to/MyPerf4J-ASM.jar
-DMyPerf4JPropFile=/path/to/MyPerf4J.properties           

開源位址

https://github.com/LinShunKang/MyPerf4J

繼續閱讀