MyPerf4J
一個針對高并發、低延遲應用設計的高性能且無侵入的實時Java性能監控和統計工具。 受 perf4j 和 TProfiler啟發而來。
MyPerf4J具有以下幾個特性:
無侵入: 采用JavaAgent方式,對應用程序完全無侵入,無需修改應用代碼
高性能: 性能消耗非常小,每次記錄只花費73ns,可以在生產環境長期使用
低內存: 采用內存復用的方式,整個生命周期只產生極少的臨時對象,不影響應用程序的GC
高精度: 采用納秒來計算響應時間
高實時: 支持秒級監控,最低1s!
文檔
監控指標
MyPerf4J為每個應用收集數十個監控指標,所有的監控指標都是實時采集和展現的。
下面是MyPerf4J目前支持的監控指標列表:
想知道如何實現上述效果?請先按照快速啟動的描述啟動應用,再按照這里的描述進行安裝配置即可。
快速啟動
MyPerf4J采用JavaAgent配置方式,透明化接入應用,對應用代碼完全沒有侵入。
打包
git clone git@github.com:ThinkpadNC5/MyPerf4J.git
mvn clean package
把 MyPerf4J-ASM-${MyPerf4J-version}.jar 重命名為 MyPerf4J-ASM.jar
配置
在JVM啟動參數里加上以下兩個參數
-javaagent:/your/path/to/MyPerf4J-ASM-${MyPerf4J-version}.jar
-DMyPerf4JPropFile=/your/path/to/myPerf4J.properties
其中,MyPerf4JPropFile的配置如下:
#應用名稱
AppName=MyPerf4JTest
#配置MetricsProcessors,可不配置
#MethodMetricsProcessor=cn.myperf4j.ext.metric.processor.influxdb.InfluxDBMethodMetricsProcessor
#ClassMetricsProcessor=cn.myperf4j.ext.metric.processor.influxdb.InfluxDBJvmClassMetricsProcessor
#GCMetricsProcessor=cn.myperf4j.ext.metric.processor.influxdb.InfluxDBJvmGCMetricsProcessor
#MemMetricsProcessor=cn.myperf4j.ext.metric.processor.influxdb.InfluxDBJvmMemoryMetricsProcessor
#ThreadMetricsProcessor=cn.myperf4j.ext.metric.processor.influxdb.InfluxDBJvmThreadMetricsProcessor
#配置備份Recorders的數量,默認為1,最小為1,最大為8,當需要在較小MillTimeSlice內統計大量方法性能數據時可配置大一些
BackupRecordersCount=1
#配置Record模式,可配置為accurate/rough
RecorderMode=accurate
#配置時間片,單位為ms,最小1s,最大600s
MillTimeSlice=10000
#需要監控的package,可配置多個,用英文';'分隔
IncludePackages=cn.perf4j.demo
#不需要監控的package,可配置多個,用英文';'分隔
ExcludePackages=org.spring;
#可配置多個方法名,用英文';'分隔
ExcludeMethods=equals;hash
#是否排除私有方法,true/false
ExcludePrivateMethod=true
#通用的方法執行時間閾值,單位為ms
ProfilingTimeThreshold=1000
#在一個時間片內,超過方法執行時間閾值的次數,僅在RecorderMode=accurate時有效
ProfilingOutThresholdCount=10
想了解更多的配置?請看這里
運行
輸出結果,默認輸出到stdout.log: MyPerf4J Performance Statistics [2018-07-01 23:40:23, 2018-07-01 23:40:24]
Api[2/3] RPS Avg(ms) Min(ms) Max(ms) StdDev Count TP50 TP90 TP95 TP99 TP999 TP9999 TP99999 TP100
DemoServiceImpl.getId1 7454181 0.00 0 0 0.00 7454181 0 0 0 0 0 0 0 0
DemoServiceImpl.getId2 7454180 0.00 0 0 0.00 7454180 0 0 0 0 0 0 0 0
卸載
在JVM啟動參數中去掉以下兩個參數,重啟即可卸載此工具。
-javaagent:/your/path/to/MyPerf4J-ASM.jar
-DMyPerf4JPropFile=/your/path/to/myPerf4J.properties
問題
如果您遇到任何問題或有疑問,請您毫不猶豫的提交Issue : )
更多信息
PS: 如果覺得寫得還行,請**star**這個項目,讓更多人了解和使用MyPerf4J :) 。