MyPerf4J
一个针对高并发, 低延迟应用设计的高性能且无侵入的实时 Java 方法性能监控和统计工具. 受 https://github.com/perf4j/perf4j 和 https://github.com/alibaba/TProfiler 启发而来.
MyPerf4J 具有以下几个特性:
无侵入: 采用 JavaAgent 方式, 对应用程序完全无侵入, 无需修改应用代码
高性能: 性能消耗非常小, 每次统计只花费 73ns, 可以在生产环境长期使用
低内存: 采用内存复用的方式, 整个生命周期只产生极少的临时对象, 不影响应用程序的 GC
高精度: 采用纳秒来计算响应时间
高实时: 支持秒级监控, 最低 1s!
文档
English https://github.com/ThinkpadNC5/MyPerf4J/blob/develop/README.md Document https://github.com/ThinkpadNC5/MyPerf4J/wiki/English-Doc
中文文档 https://github.com/ThinkpadNC5/MyPerf4J/wiki/Chinese-Doc
可视化
目前 MyPerf4J 已提供 Grafana Dashboard https://grafana.com/dashboards/6991 进行数据展示
想知道如何实现上述效果? 请先按照 快速启动 https://github.com/ThinkpadNC5/MyPerf4J#快速启动 的描述启动应用, 再按照 这里 https://github.com/ThinkpadNC5/MyPerf4J/wiki/InfluxDB_ 的描述进行安装配置即可.
快速启动
MyPerf4J 采用 JavaAgent 配置方式, 透明化 接入应用, 对应用代码完全 没有侵入 .
打包
- git clone mailto: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 的配置如下:
- # 配置 PerfStatsProcessor, 可不配置, 用于自定义统计数据的处理
- #PerfStatsProcessor=cn.perf4j.demo.MyPerfStatsProcessor
- # 配置备份 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
想了解更多的配置? 请看 这里 https://github.com/ThinkpadNC5/MyPerf4J/wiki/配置
运行
输出结果, 默认输出到 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
想 定制 你的输出结果? 请看 这里 https://github.com/ThinkpadNC5/MyPerf4J/wiki/扩展
卸载
在 JVM 启动参数中去掉以下两个参数, 重启即可卸载此工具.
- -javaagent:/your/path/to/MyPerf4J-ASM.jar
- -DMyPerf4JPropFile=/your/path/to/myPerf4J.properties
问题
如果您遇到任何问题或有疑问, 请您毫不犹豫的 提交 Issue https://github.com/ThinkpadNC5/MyPerf4J/issues/new : )
更多信息
想更深入的了解 MyPerf4J? 请看 https://github.com/ThinkpadNC5/MyPerf4J/wiki/Chinese-Doc .
来源: http://www.tuicool.com/articles/UZNnMn6