一个高性能、无侵入的Java性能监控和统计工具,有点东西!

news2024/11/16 13:40:27

背景

随着所在公司的发展,应用服务的规模不断扩大,原有的垂直应用架构已无法满足产品的发展,几十个工程师在一个项目里并行开发不同的功能,开发效率不断降低。

于是公司开始全面推进服务化进程,把团队内的大部分工程师主要精力全部都集中到服务化中。服务化可以让每个工程师仅在自己负责的子项目中进行开发,提高了开发的效率,但是服务化同时也带来了其他问题:

  • 无法知道每个服务的运行情况,例如,某一台服务它目前的 QPS 是多少?它的平均延迟是多少,99% 的延迟是多少,99.9% 的延迟又是多少?

  • 某一个接口响应时间慢,如何定位是哪个方法引起的?

  • 每个服务的负载是否均衡?

  • 当服务出现抖动时,如何判断是 DB、Cache 还是下游服务引起的?

  • DB 和 Cache 响应延迟是多少?

  • 如何评估服务的容量,随着服务的调用量越来越大,这个服务需要多少机器来支撑?什么时候应该加机器?

针对以上开发中的烦恼,今天我们介绍一个针对高并发、低延迟应用设计的高性能 Java 性能监控和统计工具——MyPerf4J

使用场景

  • 在开发环境中快速定位 Java 应用程序的性能瓶颈

  • 在生产环境中长期监控 Java 应用程序的性能指标

特性

  • 高性能: 单线程支持每秒 1000万次 响应时间的记录,每次记录只花费 73纳秒

  • 无侵入: 采用 JavaAgent 方式,对应用程序完全无侵入,无需修改应用代码

  • 低内存: 采用内存复用的方式,整个生命周期只产生极少的临时对象,不影响应用程序的GC

  • 高精度: 采用纳秒来计算响应时间

  • 高实时: 支持秒级监控,最低 1 秒!

监控指标

MyPerf4J 为每个应用收集数十个监控指标,所有的监控指标都是实时采集和展现的。

下面是 MyPerf4J 目前支持的监控指标列表:

Method

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

Memory

HeapInit,HeapUsed,HeapCommitted,HeapMax,NonHeapInit,NonHeapUsed,NonHeapCommitted,NonHeapMax

JVM GC

CollectCount,CollectTime

JVM Class

Total,Loaded,Unloaded

快速启动

MyPerf4J 采用 JavaAgent 配置方式,透明化接入应用,对应用代码完全没有侵入。

下载

  • 下载并解压 MyPerf4J-ASM.zip

  • 阅读解压出的 README 文件

  • 修改解压出的 MyPerf4J.properties 配置文件中 app_namemetrics.log.xxx 和 filter.packages.include 的配置值

  • MyPerf4J-ASM.zip包:https://github.com/LinShunKang/Objects/blob/master/zips/CN/MyPerf4J-ASM-3.3.0-SNAPSHOT.zip?raw=true

配置

在 JVM 启动参数里加上以下两个参数

-javaagent:/path/to/MyPerf4J-ASM.jar
-DMyPerf4JPropFile=/path/to/MyPerf4J.properties

运行

启动应用,监控日志输出到 /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

卸载

在 JVM 启动参数中去掉以下两个参数,重启即可卸载此工具。

-javaagent:/path/to/MyPerf4J-ASM.jar
-DMyPerf4JPropFile=/path/to/MyPerf4J.properties

开源地址

  • https://github.com/LinShunKang/MyPerf4J

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/107971.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

你造Python中的上下文管理器是啥吗

上下文管理器(Context managers)让我们在需要的时候可以准确地分配或释放资源 Python中最常用的上下文管理例子就是with语句了,一般是在操作文件的时候,比如: 有PY基础的小伙伴都知道,上面的代码等价于: 对比两个例子…

python机器学习及深度学习在空间模拟与时间预测领域中的应用

了解机器学习的发展历史、计算原理、基本定义,熟悉机器学习方法的分类,常用机器学习方法,以及模型的评估与选择;熟悉数据预处理的流程,掌握python程序包的使用;理解机器学习在生态水文中的应用,…

使用Python绘制圣诞树教程(附源代码)

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

Qt Creator 运行LVGL模拟器

windows下用Qt Creator运行LVGL 8.2 背景 最近在学习LVGL,手头又没有硬件,好多网上资料介绍了如何在PC端模拟,纯C语言实现的库模拟的话也不会复杂,恰巧本人熟悉Qt Creator,那就用这个环境模拟吧,网上搜索…

为什么企业传统网络访问海外应用程序不稳定、速度慢?怎么解决?

外贸、游戏等行业经常会有跨网数据访问的需求,并且访问慢、卡是常见的问题。这其中主要的原因是网络访问速度与物理距离有直接关系。刨除距离原因,还有哪些因素影响了我们的访问呢?那么访问国站慢的影响因素有哪些? 在中国的国内用户,使用应…

下载安装npm,配置环境变量详细教程

要在本地运行项目,就需要安装npm,其次还需要配置项目依赖node-modules。今天我们就先安装npm npm下载安装一、安装1、下载2、勾选同意,下一步3、默认的存储位置即可,next4、不用勾选,next5、点击install6、等待安装完成…

通过 Mito 在 Python 中使用电子表格

在本文中,您将学习如何使用这个强大的库,该库能够自动执行某些 Pandas 任务并以非常快速的方式执行数据分析。 Mitosheet是什么? Mitosheet 是 Python 中可用的众多库之一,它实际上是 Python 和电子表格之间的融合,大大加快了数据分析过程。 安装过程 您可以安装在分析…

《Python多人游戏项目实战》第五节 断线重连

目录 5.1 模拟弱网状态 5.2 断线重连 5.3 优化玩家名称显示 5.4 完整代码下载地址 导致客户端和服务端断开连接的原因可能有以下三种: 服务端主动关闭连接。客户端窗口关闭,玩家退出游戏。客户端所在网络不给力(也叫做弱网)&…

Redis - Redis持久化:AOF和RDB

1. 为什么要持久化 Redis是内从数据库,宕机后数据会丢失;Redis重启后,为了快速恢复数据,提供了持久化机制;Redis有两种持久化方式:RDB和AOF,这也是Redis无畏宕机与快速恢复数据的杀手锏。 注意…

全球代表供应商!腾讯安全NDR再获Gartner认可

近日,国际研究机构Gartner发布了2022年《Market Guide for Network Detection and Response》(《网络检测和响应(NDR)市场指南》)(以下简称《报告》),腾讯安全被Gartner列为全球NDR市…

非零基础自学Golang 第17章 HTTP编程(上) 17.3 爬虫框架gocolly 17.3.1 gocolly简介

非零基础自学Golang 文章目录非零基础自学Golang第17章 HTTP编程(上)17.3 爬虫框架gocolly17.3.1 gocolly简介第17章 HTTP编程(上) 17.3 爬虫框架gocolly 我们在之前学习了如何使用标准库实现HTTP爬虫【其实也不算,就实现了简单的请求,但是爬虫不就是这…

别乱用了,用新的。Go SliceHeader 和 StringHeader 将会被废弃!

大家好,我是煎鱼。Go 语言中有个很经典的 (Slice|String)Header,经常出现在大家视野中,为此我写了《Go SliceHeader 和 StringHeader,你知道吗?》给大家介绍,避免被面试官卷到。以重点来讲,Slic…

Alibaba送给开发人员的“礼物”:Java架构成长笔记,深入内核,拒绝蒙圈

提起阿里,行外人联想到的关键词无非是“交易”、“淘宝”、“支付宝”,但对于程序员来说,阿里庞大的技术体系才是最吸引人的。实际上阿里作为国内一线互联网公司的头把交椅,内部的技术体系和发展都是备受关注的,对于程…

【javaScript总结归纳】字符串常用方法总结

前言 在js中我们对字符串进行一部分截取,可以使用slice()函数截取,也可以直接用substring()函数来截取,但是截取也有可能出bug const str小𠮷和小𧨁今天吃了50块钱的KFC console.log(str.slice(0,5)); 可以在控制台看…

评估EtherCAT从站节点解决方案

本系列博客文章的第1部分介绍了用于C2000™微控制器的EtherCAT从站堆栈解决方案的市场机遇,以及从站堆栈开发快速入门的三个阶段指南。第2部分详细说明了TIC2000 MCU EtherCAT实施的特点和优势。第3部分分别介绍了使用EtherCAT从站和C2000 Delfino MCU controlCARD套…

Linux【windows使用xshell连接本地虚拟机】【Mac使用terminal连接本地虚拟机】

文章目录对于本地虚拟机的配置使用Mac的terminal的ssh连接本地虚拟机windows使用xshell连接本地虚拟机对于本地虚拟机的配置 IP地址和子网掩码。 在虚拟机中使用ping命令判断虚拟机到宿主机是否是连通的。(不通的话,关闭Windows防火墙,再试一…

python+pyhyper实现识别图片中的车牌号

背景 最近领导给布置了一个基于图片识别车牌号的工具开发任务,然后就去研究实现逻辑,自己根据opencv写了一个小demo,发现不仅速度慢而且成功率极低。然后,就找到了Hyperlpr开源项目。 环境搭建 排雷1:有教程说在git…

动态内存管理易错点+分析例题

复习一下: 常见的错误: 1.可能返回的是空指针 2.对动态开辟的内存越界访问 3.非动态开辟内存却用free释放 4.使用free释放动态开辟内存的一部分 5.free多次释放 如果加了pNULL的话 free(p)相当于啥也不干 程序起码不会崩掉 6.动…

RabbitMQ、RocketMQ、Kafka延迟队列实现

延迟队列在实际项目中有非常多的应用场景,最常见的比如订单未支付,超时取消订单,在创建订单的时候发送一条延迟消息,达到延迟时间之后消费者收到消息,如果订单没有支付的话,那么就取消订单。 那么&#xf…

Proteus8仿真:51单片机IrLink红外发送加接受模块的使用

51单片机IrLink红外的使用元器件原理图部分代码单片机1发送main.c单片机2接受main.c工程文件元器件 元器件名称51单片机AT89C51红外收发IRLINK按键BUTTON发光二极管LED-RED时钟激励源DCLOCK与门74LS08示波器 原理图部分 关于IRLINK的使用: 在Proteus上就是一个红外…