MyPerf4J 一個高性能、無侵入的Java性能監控和統計工具

Markdown

一個針對高併發、低延遲應用設計的高性能且無侵入的實時Java性能監控和統計工具。
perf4jTProfiler啓發而來。

MyPerf4J具備如下幾個特性:java

  • 無侵入: 採用JavaAgent方式,對應用程序徹底無侵入,無需修改應用代碼
  • 高性能: 性能消耗很是小,每次記錄只花費73ns,能夠在生產環境長期使用
  • 低內存: 採用內存複用的方式,整個生命週期只產生極少的臨時對象,不影響應用程序的GC
  • 高精度: 採用納秒來計算響應時間
  • 高實時: 支持秒級監控,最低1s!

文檔

監控指標

MyPerf4J爲每一個應用收集數十個監控指標,全部的監控指標都是實時採集和展示的。git

下面是MyPerf4J目前支持的監控指標列表:github

RPS,Count,Avg,Min,Max,StdDev,TP50, TP90, TP95, TP99, TP999, TP9999, TP99999, TP100
Markdown
Markdownspring

TotalStarted,Runnable,Blocked,Waiting,TimedWaiting,Terminated,Active,Peak,Daemon,New
Markdown併發

HeapInit,HeapUsed,HeapCommitted,HeapMax,NonHeapInit,NonHeapUsed,NonHeapCommitted,NonHeapMax
Markdown高併發

CollectCount,CollectTime
Markdown工具

Total,Loaded,Unloaded
Markdown性能

> 想知道如何實現上述效果?請先按照[快速啓動](https://github.com/ThinkpadNC5/MyPerf4J#%E5%BF%AB%E9%80%9F%E5%90%AF%E5%8A%A8)的描述啓動應用,再按照[這裏](https://github.com/ThinkpadNC5/MyPerf4J/wiki/InfluxDB_)的描述進行安裝配置便可。

快速啓動

MyPerf4J採用JavaAgent配置方式,透明化接入應用,對應用代碼徹底沒有侵入spa

打包

  • 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 : )

更多信息

想更深刻的瞭解MyPerf4J?請看 https://github.com/ThinkpadNC5/MyPerf4J/wiki/Chinese-Doc

PS: 若是以爲MyPerf4J對您有幫助,請star這個項目,讓更多人瞭解和使用MyPerf4J :) 。

相關文章
相關標籤/搜索