一個針對高并發、低延遲應用設計的高性能 Java 性能監控和統計工具。
特性
- 高性能: 單線程支持每秒 1000 萬次 響應時間的記錄,每次記錄只花費 73 納秒
- 無侵入: 采用 JavaAgent 方式,對應用程序完全無侵入,無需修改應用代碼
- 低內存: 采用內存復用的方式,整個生命周期只產生極少的臨時對象,不影響應用程序的 GC
- 高精度: 采用納秒來計算響應時間
- 高實時: 支持秒級監控,最低 1 秒
使用場景
- 在開發環境中快速定位 Java 應用程序的性能瓶頸
- 在生產環境中長期監控 Java 應用程序的性能指標
文檔
監控指標
MyPerf4J 為每個應用收集數十個監控指標,所有的監控指標都是實時采集和展現的。
下面是 MyPerf4J 目前支持的監控指標列表:
-
Method Metrics
RPS,Count,Avg,Min,Max,StdDev,TP50, TP90, TP95, TP99, TP999, TP9999, TP99999, TP100 -
JVM Metrics
Thread,Memory,ByteBuff,GC,Class
快速啟動
MyPerf4J 采用 JavaAgent 配置方式,透明化接入應用,對應用代碼完全沒有侵入。
打包
- git clone git@github.com:LinShunKang/MyPerf4J.git
- mvn clean package
- 把 MyPerf4J-ASM-${MyPerf4J-version}.jar 重命名為 MyPerf4J-ASM.jar
可以嘗試直接下載 MyPerf4J-ASM.jar
配置
在 JVM 啟動參數里加上以下兩個參數
- -javaagent:/your/path/to/MyPerf4J-ASM.jar
- -DMyPerf4JPropFile=/your/path/to/myPerf4J.properties
形如:java -javaagent:/your/path/to/MyPerf4J-ASM.jar -DMyPerf4JPropFile=/your/path/to/myPerf4J.properties -jar yourJar.jar
注意:使用 Windows 的同學,請注意修改路徑格式,包括
MyPerf4JPropFile
中的文件路徑
其中,MyPerf4JPropFile
的配置如下:
#應用名稱
AppName=MyPerf4JTest
#MetricsProcessor類型,0:以標準格式化結構輸出到stdout.log 1:以標準格式化結構輸出到磁盤 2:以InfluxDB LineProtocol格式輸出到磁盤
MetricsProcessorType=1
#配置各個Metrics日志的文件路徑,可不配置
MethodMetricsFile=/data/logs/MyPerf4J/method_metrics.log
ClassMetricsFile=/data/logs/MyPerf4J/class_metrics.log
GCMetricsFile=/data/logs/MyPerf4J/gc_metrics.log
MemMetricsFile=/data/logs/MyPerf4J/memory_metrics.log
BufPoolMetricsFile=/data/logs/MyPerf4J/buf_pool_metrics
ThreadMetricsFile=/data/logs/MyPerf4J/thread_metrics.log
#配置Record模式,可配置為accurate/rough
RecorderMode=accurate
#配置時間片,單位為ms,最小1s,最大600s
MilliTimeSlice=10000
#需要監控的package,可配置多個,用英文';'分隔
IncludePackages=cn.perf4j.demo;cn.perf4j.demo1.[p1,p2,p3];cn.*.demo.*
#是否展示方法參數類型
ShowMethodParams=true
想了解更多的配置?請看這里
運行
-
輸出結果,輸出到 /data/logs/MyPerf4J/method_metrics.log:
MyPerf4J Method Metrics [2019-03-03 17:27:50, 2019-03-03 17:28:00] Method[5] Type RPS Avg(ms) Min(ms) Max(ms) StdDev Count TP50 TP90 TP95 TP99 TP999 TP9999 TP99999 TP100 DemoServiceImpl.getId1(long) General 51317 0.00 0 1 0.00 513178 0 1 1 1 1 1 1 1 DemoServiceImpl.getId2(long) General 168637 0.00 0 4 0.00 1686377 0 1 2 3 4 4 4 4 DemoServiceImplV2.getId1(long) General 357 0.00 0 0 0.00 3570 0 0 0 0 0 0 0 0 DemoServiceImplV2.getId3(long) General 713 0.51 0 5 0.08 7138 0 1 2 3 4 5 5 5 Dao.doQuery() DynamicProxy 1394 0.51 0 5 0.05 13944 0 1 2 3 4 5 5 5
卸載
在 JVM 啟動參數中去掉以下兩個參數,重啟即可卸載此工具。
- -javaagent:/your/path/to/MyPerf4J-ASM.jar
- -DMyPerf4JPropFile=/your/path/to/myPerf4J.properties
問題
如果您有任何問題、疑問或者建議,請您毫不猶豫的 提交Issue 或者 發送郵件 : )
已知用戶
如果您在使用 MyPerf4J,請告訴我,您的使用對我來說非常重要:https://github.com/LinShunKang/MyPerf4J/issues/30 (按登記順序排列)
參考項目
MyPerf4J 是受以下項目啟發而來:
更多信息
想更深入的了解 MyPerf4J?請看 https://github.com/LinShunKang/MyPerf4J/wiki/Chinese-Doc。