0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

jf_ro2CN3Fa 来源:芋道源码 2023-06-19 09:43 次阅读

背景

使用场景

特性

监控指标

快速启动

开源地址

77de59b6-0e41-11ee-962d-dac502259ad0.jpg

背景

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

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

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

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

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

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

DB 和 Cache 响应延迟是多少?

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

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

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

项目地址:https://github.com/YunaiV/ruoyi-vue-pro

视频教程:https://doc.iocoder.cn/video/

使用场景

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

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

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

项目地址:https://github.com/YunaiV/yudao-cloud

视频教程:https://doc.iocoder.cn/video/

特性

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

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

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

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

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

监控指标

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

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

Method

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

77e933d6-0e41-11ee-962d-dac502259ad0.gif

Memory

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

784f2966-0e41-11ee-962d-dac502259ad0.gif

JVM GC

CollectCount,CollectTime

788c7550-0e41-11ee-962d-dac502259ad0.gif

JVM Class

Total,Loaded,Unloaded

78985b5e-0e41-11ee-962d-dac502259ad0.gif

快速启动

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

下载

下载并解压 MyPerf4J-ASM.zip

阅读解压出的 README 文件

修改解压出的 MyPerf4J.properties 配置文件中 app_name、metrics.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
78a5ed6e-0e41-11ee-962d-dac502259ad0.png

运行

启动应用,监控日志输出到 /path/to/log/method_metrics.log:

MyPerf4JMethodMetrics[2020-01-0112:49:57,2020-01-0112:49:58]
Method[6]TypeLevelTimePercentRPSAvg(ms)Min(ms)Max(ms)StdDevCountTP50TP90TP95TP99TP999TP9999
DemoServiceImpl.getId2(long)GeneralService322.50%65240.49010.506524011111
DemoServiceImpl.getId3(long)GeneralService296.10%43500.68010.474350111111
DemoServiceImpl.getId4(long)GeneralService164.60%21760.76010.432176111111
DemoServiceImpl.getId1(long)GeneralService0.00%87040.00000.008704000000
DemoDAO.getId1(long)DynamicProxyDAO0.00%21760.00000.002176000000
DemoDAO.getId2()DynamicProxyDAO0.00%21760.00000.002176000000

卸载

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

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

责任编辑:彭菁

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    19

    文章

    2966

    浏览量

    104707
  • 开发
    +关注

    关注

    0

    文章

    370

    浏览量

    40836
  • 应用程序
    +关注

    关注

    37

    文章

    3267

    浏览量

    57684

原文标题:高性能、无侵入的 Java 性能监控神器

文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Java开发环境概述

    Eclipse、JBuilder。本书各章示例基本Eclipse下开发。JDK虽然无可视化集成编程环境,但是对开发基础性、通用性软件有其独到的优势。对于编程初学者,开始
    发表于 12-06 00:18

    英创主板JAVA应用开发简介

    ,即可通过英创提供的java类,访问硬件接口。为了让用户能够快速熟悉英创主板上的Java程序开发,英创提供了完整的
    发表于 10-20 13:13

    使用Eclipse WTP开发Java Web应用程序

    使用Eclipse WTP开发Java Web应用程序时,我们需要在计算机安装tomcat才能执行该应用程序。如果在项目上使用Maven,
    发表于 12-16 07:00

    如何在嵌入式容器Jetty或Tomcat运行带有Maven的Java Web应用程序

    开发Java Web应用程序时,从“真实”环境获得快速
    发表于 12-16 06:24

    Java程序设计基础

    Java程序设计基础 一、实验目的:      通过编制一个完整的应用程序,使得学生对Java应用程序
    发表于 12-05 23:53 1556次阅读

    快速识别应用程序性能瓶颈

    RATIONAL QUANTIFY FOR WINDOWS能查明应用程序性能瓶颈,从而确保使用JAVA、VISUAL C/C++和VISUAL BASIC
    发表于 04-18 22:15 20次下载

    理解Java字符流与字节流的区别

    JDK称为Java开发包或Java开发工具,是一个编写Java的Applet小程序
    发表于 12-04 10:39 1118次阅读
    理解<b class='flag-5'>Java</b><b class='flag-5'>中</b>字符流与字节流的区别

    Java开发环境配置(win7_64bit)

    搭建Java开发环境一般需要同时安装JDK和JRE。 JDK:指Java开发工具包Java
    的头像 发表于 02-01 15:03 3236次阅读
    <b class='flag-5'>Java</b><b class='flag-5'>开发</b><b class='flag-5'>环境</b>配置(win7_64bit)

    如何用Java代码来创建iOS和Android应用程序

    了解Multi-OS Engine(beta)如何帮助Java开发人员快速创建iOS和Android应用程序
    的头像 发表于 11-08 06:42 4197次阅读

    Java多线程应用程序的数据存储库使用改进

    当执行的查询数量很大时,数据存储库通常是高要求系统的瓶颈。延迟批处理执行器(DelayedBatchExecutor)是一个组件,可通过Java多线程应用程序
    的头像 发表于 05-05 20:46 1904次阅读
    <b class='flag-5'>Java</b>多线程<b class='flag-5'>应用程序</b>的数据存储库使用改进

    最新的Java环境包JavaSetup8u281应用程序免费下载

    最新的Java环境包JavaSetup8u281应用程序免费下载
    发表于 01-26 08:00 28次下载
    最新的<b class='flag-5'>Java</b><b class='flag-5'>环境</b>包JavaSetup8u281<b class='flag-5'>应用程序</b>免费下载

    LabVIEW应用程序性能瓶颈的解决

    了解如何识别和解决LabVIEW应用程序性能瓶颈。使用内置工具和VI分析器,您可以监视VIs的内存使用情况和执行时间,以确定导致应用程序性能
    发表于 03-29 14:03 8次下载
    LabVIEW<b class='flag-5'>应用程序</b>中<b class='flag-5'>性能</b><b class='flag-5'>瓶颈</b>的解决

    开发java应用程序的基本步骤是

    ava是一种面向对象的编程语言,广泛用于开发各种类型的应用程序开发Java应用程序时,有一些
    的头像 发表于 11-28 16:52 1594次阅读

    java环境配置成功后能执行哪些操作

    。 使用Java开发工具包(JDK):Java环境配置成功后,您可以使用Java开发工具包(JD
    的头像 发表于 12-06 15:55 777次阅读

    华纳云:java web和java有什么区别java web和java有什么区别

    的平台,Java可以用于开发桌面应用程序、移动应用程序、企业级应用程序等。 – Java Web
    的头像 发表于 07-16 13:35 788次阅读
    华纳云:<b class='flag-5'>java</b> web和<b class='flag-5'>java</b>有什么区别<b class='flag-5'>java</b> web和<b class='flag-5'>java</b>有什么区别