首页 > 编程语言 >使用JProfiler分析程序性能问题

使用JProfiler分析程序性能问题

时间:2023-08-21 21:37:35浏览次数:45  
标签:JProfiler 性能 分析程序 对象 内存 jvm 可以 引用

JProfiler是一个分析运行时JVM的专业工具,根据官网的介绍,应用主要有以下几个功能:

  • 方法调用:通常被称为"CPU分析"。方法调用可以通过不同的方式进行测量和可视化, 分析方法调用可以帮助了解你的应用程序正在做什么,并找到提高其性能的方法。

  • 分配:分析堆上对象的分配、引用链和垃圾回收属于"内存分析"的范畴。 这个功能可以让你解决内存泄漏,总之使用更少的内存,分配更少的临时对象。

  • 线程和锁:线程可以持有锁,例如通过在一个对象上做同步。当多个线程协作时,可能会出现死锁,JProfiler可以为你可视化这种情况。 此外,锁可能被争用,这意味着线程在获得锁之前必须等待。通过JProfiler可以深入了解线程及其各种锁情形。

  • 高层子系统:许多性能问题发生在更高的语义层面。例如,对于JDBC调用,你可能想找出哪条SQL语句是最慢的。 对于这样的子系统,JProfiler提供了"探针",将特定有效载荷附加到调用树。

可以使用这个工具对java应用进行性能分析,找到长耗时方法、内存泄露位置等;

安装与启动

可以从官网上找到安装包,下载安装即可。根据网站上介绍的架构可以看出,jprofiler用了与rasp相同的技术javaagent进行程序分析

在本地安装的时候安装全部内容,如果需要在线上定位jvm性能问题,需要到对应机器上安装Jprofiler Agent。

本地使用时,可以在idea到插件仓库中搜索 jprofiler ,安装插件,插件安装完成后,在应用启动配置的面板会多两个按钮

1 可以自动把 jprofile 的启动参数添加到应用到jvm参数中,2 启动本地的 JProfiler GUI,通过选择连接到jvm即可(此时选择jvm的时候,有绿色的底色提示等待连接)

需要进行远程调试的时候,可以在 启动中心-新会话-新远程集成 根据提示步骤连接。

可以在远程集成的一步安装agent的时候,把agent装到目标机器,然后在启动的命令行手动添加jvm 参数 -agentpath:/opt/jprofile/jprofiler13/bin/linux-x64/libjprofilerti.so=port=8849 ,然后 直接 attach 到远端服务器,指定端口号与IP地址即可。

启动之后会有不同的方法调用记录选项,比如 Instrumentation 和 sampling,Instrumentation 修改了字节码,可以准确追踪各函数的调用,sampling只是定时采样,采样周期内的短耗时函数可能不能被记录;Instrumentation支持的功能更多,但是也有一些影响,比如高频调用的函数性能与耗时会被instrumentation影响,这里使用Instrumentation选项查看。

状态监控

连接上jvm后,有个整体的面板可以对jvm中的信息进行监控,比如内存使用、对象数量、GC、cpu活动等

内存监控与对象引用分析

在菜单实时内存页面可以看到内存上对象的数量以及大概占用的内存大小信息,实时内存监控主要是查看哪些临时对象被频繁的创建,可以使用标记当前来设定一个标记,过一段时间新创建的对象就会被用其他颜色标记出来。

不过深入一点的问题都会涉及到对象之间的引用。例如,在记录的对象、分配树和分配热点视图中显示的大小都是浅层大小, 它们只是包括了类的内存布局,但不包括任何引用的类。要想知道一个类的对象到底有多大,你通常需要知道保留大小, 也就是如果从堆中删除这些对象所释放的内存量。

如果想研究对象之间的引用关系,计算保留大小等,需要对内存中的对象信息进行统计计算,这个计算成本很高,一半都是把内存信息转储之后进行分析,也就是堆遍历器的功能,在堆遍历器可以新建一个快照。

新建一个堆转储后,记录的信息是经过gc后存活下的对象信息:

选择一个类后,可以查看类的引用:

  • 传入引用,可以理解为什么对象引用了该对象

  • 传出引用:该对象引用了其他别的什么对象

  • 合并的传入引用:什么类引用了该对象的类

  • 合并的传出引用:这个对象引用了其他的类

  • 合并的支配引用:当清除支配引用中的对象时,当前对象会被gc

参考

https://www.ej-technologies.com/resources/jprofiler/v/12.0/help_zh_CN/doc/main/introduction.html

标签:JProfiler,性能,分析程序,对象,内存,jvm,可以,引用
From: https://www.cnblogs.com/cyyyyx/p/17647113.html

相关文章

  • MT6783核心板,MTK6783安卓核心板性能参数
    联发科的MT6783核心板采用高性能四大核A76和四小核A55的旗舰八核架构,主频高达2GHz,为用户带来更流畅的应用程序加载和游戏体验。作为联发科在5G集成SoC技术上的领先者,天玑800采用了7nm制程,为厂商提供高效、旗舰级的5GSoC解决方案。MT6783核心板内置双载波聚合的5G集成单芯片,在提供......
  • 华为Atlas的迭代关系、性能特点与典型应用场景
    衔接上文,本篇主要讲解华为Atlas训练卡的迭代关系。以及迭代后的训练卡性能特点与典型应用场景。Atlas300TA2训练卡的迭代关系为Atlas300TPro升级到Atlas300TA2。相比之下,Atlas300TA2性能特点:○ 高度集成AI算力、通用算力、I/O能力三合一。处理器集成20个华为达芬奇AICor......
  • 高性能MySQL实战(一):表结构
    最近因需求改动新增了一些数据库表,但是在定义表结构时,具体列属性的选择有些不知其所以然,索引的添加也有遗漏和不规范的地方,所以我打算为创建一个高性能表的过程以实战的形式写一个专题,以此来学习和巩固这些知识。1.实战我使用的MySQL版本是5.7,建表DDL语句如下所示:根据需求......
  • Vue 项目性能优化实践
    Vue已经成为前端必备利器了,Vue首页加载速度慢是很常见的问题,dist文件的体积差不多都在10m左右,解决方式也有很多,最简单的方式增加服务器的配置性能,当然在预算有限的情况下,如果通过优化来提升速度呢。比如在一台普通配置服务器上,差不多加载速度在15s左右,那是没办法接受的,不管是用......
  • Linux下安装性能系统监控Nmon工具
    一、Nmon下载安装Nmon安装包下载地址:链接:https://pan.baidu.com/s/1U9Nv_zTz0YXVkMEv5X5zvg提取码:7kkw二、Nmon工具介绍Nmon是一款性能系统监控工具,免费,体积小,安装简单,耗费资源低,广泛应用于Linux系统,它可以轻松的监控系统的CPU、内存、网络、硬盘、文件系统、NFS、高......
  • 使用redis pipeline提升性能
    前言本篇来介绍一下redispipeline,主要是由于最近一次在帮开发同学review代码的时候,发现对redis有个循环操作可以优化。场景大概是这样的,根据某个uid要从redis查询一批数据,每次大概1000个key左右,如果查得到就返回,否则查db,然后写回缓存。由于每次要查的key比较多,虽然redis单次查询......
  • 产品经理如何利用KPI指标实现最佳产品性能
     令人惊叹的产品KPI指标不仅意味着更多收入,而且还表明你了解你的产品。但作为产品经理,有时候会发现自己挣扎,要确定如何有效地利用KPI指标识别产品的表现。获得真正的洞察力,并将它们转换为可操作的见解,并不容易。本文将深入探讨产品经理如何有效地利用KPI指标,以便更真实度量产品......
  • MongoDB的性能监控和故障排除的强大工具FTDC(Full-Time Diagnostics Capture)
    MongoDB的FTDC(全时诊断捕获)是一项强大的诊断功能,可捕获关于MongoDB数据库性能、操作和行为的详细信息。它为数据库的运行提供了有价值的深入洞察,有助于性能监控和故障排除。在本文中,将深入探讨MongoDB的FTDC(全时诊断数据捕获)功能的强大功能。将探讨它如何捕获有关MongoDB实例......
  • 深入研究高性能数据库连接池的实现原理与优化策略
    在现代的后端应用开发中,数据库连接池是提高性能和可伸缩性的关键组件之一。本文将深入探讨数据库连接池的实现原理,涵盖Java和Python示例,并介绍一些常见的连接池优化策略。数据库连接池的作用数据库连接池是一种维护和管理数据库连接的技术,它通过预先创建一组数据库连接,并将这些连接......
  • 构建高性能后端:探秘Nginx与Elasticsearch的技术协同
    在如今的信息时代,高性能的后端技术对于应用的成功至关重要。本文将深入探讨两个关键技术领域:Nginx反向代理和Elasticsearch全文搜索。通过详细的原理解析和实际代码示例,揭示它们如何协同工作,为应用的性能和效率提供强大支持。Nginx反向代理:背后的原理Nginx不仅是一款优秀的Web服务......