查看原文
其他

3K+ Stars 开源的性能监控、统计神器

小苏 爱编程爱技术 2024-02-23

每天给大家带来网站工具、开源社区项目、开源软件、安卓&IOS软件等黑科技!

公众号推送改版,请务必点击【爱编程爱技术】右上角【设为星标🌟】,这样才不会错过最新的文章推送。

如果你们有什么好的建议,也可以在后台留言。

创作不易,希望大家给一点鼓励,把公众号设置为"星标",给文章点下""和"",谢谢大家!每日持续更新,望宝子们多多支持~

现在很多公司的 Java 语言项目都会采用微服务架构,这样做可以让每个开发人员仅在自己负责的子项目中进行开发,提高开发的效率,但是同时也带来了其他问题:
  • 无法知道每个服务的运行情况,例如,某一台服务它目前的 QPS 是多少?它的平均延迟是多少,99% 的延迟是多少,99.9% 的延迟又是多少?
  • 如何评估服务的容量,随着服务的调用量越来越大,这个服务需要多少机器来支撑?什么时候应该加机器?

  • 当服务出现抖动时,如何判断是 DB、Cache 还是下游服务引起的?
  • DB 和 Cache 响应延迟是多少?
  • 某一个接口响应时间慢,如何定位是哪个方法引起的?
  • 每个服务的负载是否均衡?

针对以上开发中所遇到的问题,小编为大家分享一款开源的性能监控统计神器:MyPerf4J。专门针对高并发、低延迟应用设计,简单快速、无侵入。能够快速定位性能瓶颈,快速定位故障原因。
该项目受 perf4j 和 TProfiler 启发而来。目前已在GitHub上斩获了 3.2k stars。

🎨️ 功能特性

  • 开源免费,简单快速、无侵入、透明化接入
  • 针对高并发、低延迟应用设计
  • 高性能: 单线程支持每秒 1600 万次 响应时间的记录,每次记录只花费 63 纳秒
  • 无侵入: 采用 JavaAgent 方式,对应用程序完全无侵入,无需修改应用代码
  • 低内存: 采用内存复用的方式,整个生命周期只产生极少的临时对象
  • 高实时: 支持秒级统计,最低统计粒度为 1 秒,并且是全量统计,不丢失任何一次记录
  • 可配置:可指定统计或不统计某些类、某些方法
  • 拥有极致的性能,不影响应用的 GC,不影响应用的 RT
  • 能统计出方法的 RPS、Avg、Min、Max、StdDev、TP90、TP95、TP99、TP999 等性能指标
  • 性能指标的处理可以定制化,例如:日志收集、上报给日志收集服务等


🧰 快速启动

MyPerf4J 采用 JavaAgent 配置方式,透明化接入应用,对应用代码完全没有侵入。
1、下载并解压 MyPerf4J-ASM.zip
# MyPerf4J-ASM.zip 地址:https://github.com/LinShunKang/Objects/blob/master/zips/CN/MyPerf4J-ASM-3.4.0-SNAPSHOT.zip?raw=true
2、修改解压出的 MyPerf4J.properties 配置文件中 app_namemetrics.log.xxx 和 filter.packages.include 的值
3、在 JVM 启动参数里加上以下两个参数
-javaagent:/path/to/MyPerf4J-ASM.jar-DMyPerf4JPropFile=/path/to/MyPerf4J.propertie
4、运行
启动应用,监控日志输出到 /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
5、卸载
在 JVM 启动参数中去掉以下两个参数,重启即可卸载此工具。
-javaagent:/path/to/MyPerf4J-ASM.jar-DMyPerf4JPropFile=/path/to/MyPerf4J.properties

🔥 监控指标预览

MyPerf4J 默认支持使用 InfluxDB 进行数据存储,向用户指定的 InfluxDB 中写入 LineProtocol 格式的性能统计数据。监控的效如下图:

JVM GC
JVM Thread
JVM Memory

MyPerf4J 官方文档中提供了以 InfluxDB 为数据源的 Grafana Dashboard,感兴趣的宝子可以参考官方文档继续深究~

最后附上项目的相关链接:

Github开源地址:

https://github.com/LinShunKang/MyPerf4J

Gitee开源地址:

https://gitee.com/mirrors/MyPerf4J

中文开发手册:

https://github.com/LinShunKang/MyPerf4J/wiki/Chinese-Doc


往期推荐:

24K+ Stars AFFiNE 超酷的开源项目
19K+ Stars 开发者的瑞士军刀,开源利器!
7k+ Stars 开源的摸鱼神器
15K+ stars 基于 Rust 编写的快速 Git 终端神器
4k+ Stars 开源的日志高亮神器
点关注不迷路,每日分享优秀开源项目

继续滑动看下一个

3K+ Stars 开源的性能监控、统计神器

小苏 爱编程爱技术
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存