# 性能诊断 JProfiler 工具使用

news2024/7/6 20:11:26

性能诊断 JProfiler 工具使用

  • JProfiler是一个重量级的JVM监控工具,提供对JVM精确监控,其中堆遍历、CPU剖析、线程剖析看成定位当前系统瓶颈的得力工具。可以统计压测过程中JVM的监控数据,定位性能问题。

官网地址:Java Profiler - JProfiler (ej-technologies.com)

安装方法

  • JProfiler Help - Installing (ej-technologies.com)

介绍

  • JProfiler是一个专业的工具,用于分析正在运行的JVM内部发生的事情。您可以在 开发,用于质量保证,并在生产系统遇到问题时执行消防任务。

方法调用

  • CPU分析:可以用不同的方式度量和可视化方法调用。对方法调用的分析可以帮助您了解应用程序正在做什么,并找到改进其性能的方法。

对象内存分配

  • 分析堆上的对象的分配、引用链和垃圾收集属于“内存分析”的范畴。此功能使您能够修复内存泄漏,通常使用更少的内存并分配更少的临时对象。

线程和锁

  • 线程可以持有锁,例如通过在对象上同步。当多个线程合作时,可能会发生死锁,JProfiler可以为您可视化它们。此外,锁可以是争用的,这意味着线程必须等待才能获得锁。JProfiler提供了对线程及其各种锁定情况的洞察。

高级子系统

  • 许多性能问题发生在更高的语义级别上。例如,对于JDBC调用,您可能希望找出哪个SQL语句是最慢的。对于这样的子系统,JProfiler提供了将特定的有效负载附加到调用树的“探测”。

Jprofiler 设置

数据采集模式

JProfier 提供两种数据采集模式 SamplingInstrumentation

  • Sampling - 适合于不要求数据完全精确的场景。优点是对系统性能的影响较小,缺点是某些特性不支持(如方法级别的统计信息)。
  • Instrumentation - 完整功能模式,统计信息也是精确的。缺点是如果需要分析的类比较多,对应用性能影响较大。为了降低影响,往往需要和 Filter 一起使用。

快照

生成堆快照

  • 在拍摄堆快照会产生过多开销或消耗过多内存的情况下,您可以 使用 JVM 作为内置功能提供的 HPROF 堆快照。 由于此操作不需要分析代理,因此这对于分析内存问题很有趣 在生产环境中运行的 JVM 中。

使用 JProfiler,有三种方法可以获取此类快照:

  • 对于实时会话,JProfiler GUI 在主菜单中提供了一个操作来触发 HPROF 堆转储。
    在这里插入图片描述

  • JProfiler 有一个特殊的“内存不足异常”触发器,用于在抛出 时保存 HPROF 快照。这对应于虚拟机参数

    -XX:+HeapDumpOnOutOfMemoryError
    

    HotSpot JVM 支持。

    • Dump文件 是在OOM内存溢出的时候,自动Dump文件转存快照的,配置JVM参数 ,就能够在发生Out of Memory错误的时候,就是把当前堆栈信息转存为快照Dump文件
      在这里插入图片描述
  • JDK 中的 jmap 可执行文件可用于从正在运行的 JVM 中提取 HPROF 堆转储。

    JProfiler 包含比 jmap 更通用的命令行工具。它 允许您选择一个进程,可以连接到在 Windows 上作为服务运行的进程,没有问题 混合了 32 位/64JVM 和自动编号的 HPROF 快照文件。使用选项执行它以获取更多信息。jpdump help

JDK 飞行记录器快照

  • JDK 包括 JDK 飞行记录器 (JFR) 机制,用于捕获有关方法的事件 执行、对象分配和 JVM 的其他重要子系统,并将它们保存到快照中。 生产环境可以选择连续使用此技术,以最大程度地减少开销并提供数据 故障 排除。可以使用以“JFR”开头的命令在JDK中记录和保存JFR快照。

  • 使用JProfiler,您可以打开JDK飞行记录器快照来分析记录的数据。打开 JFR 时 快照,只有一小部分 JProfiler 的视图将显示在对应于 JFR 记录中可用的数据类型。

Jprofiler分析Dump文件例子

分析大对象来源

  • 预估对象内存大小

  • calculate estimated retained size 预估内存对象使用大小
    在这里插入图片描述

  • 按照Size排序,可以看到TableClazzDO占用很多内存
    在这里插入图片描述

Incomming References 找引用当前对象的对象
  • 首先 选中对象,点击右键,Use select Objects;选择 incoming references 找到对象引用的地方
    在这里插入图片描述
  • 逐个查找
    在这里插入图片描述
  • 查看有问题的代码是下面写的这个测试代码
@Override
public void outOfMemory() {
    List<TableClazzDO> userList = new ArrayList();
    while (true) {
        List<TableClazzDO> tableClazzDOS = tableClazzDOMapper.selectByExample(new TableClazzDOExample());
        userList.addAll(tableClazzDOS);
    }
}
profile 大对象寻找法
使用Biggest Objects
  • 点开大对象进行分析, 同样的 Used Selected Objects
    在这里插入图片描述

  • 点击Incomming References 查找对象引用信息

  • 和上面一样点看逐个查找

Outgoing References 找该对象引用的所有对象
  • 同样的 Used Selected Objects

  • 后选择 Outgoing References 出引用信息

  • 然后点开分析该对象到底引用了哪些对象,可以看到具体的对象信息

用Graph 查找对象源
  • 先查找 Incomming References 找到对象被谁引用
  • 找到想要追查的对象后, 选择User Selected Objects
  • 后点击 Show In Graph 定位线程及Class信息
  • 然后根据 数据源Heap Walker 定位到问题的Class类信息及具体的行信息
    在这里插入图片描述

遥测

  • 监视一段时间内的标量测量值,例如使用的堆大小
    在这里插入图片描述
    完整视图显示具有当前值的图例,并且可能具有比概览中可见的选项更多的选项。 例如,“内存”遥测允许选择单个内存池。
    在这里插入图片描述

Cpu分析

  • JProfiler测量方法调用的执行时间及其调用堆栈时,我们称之为 CPU 分析。这些数据以多种方式呈现。取决于您尝试的问题 解决,一个或另一个演示文稿将最有帮助。默认情况下不记录 CPU 数据, 须打开CPU录制才能捕获用例。

调用树

  • 直观地 掌握繁忙的JVM中的方法调用次数
  • 可以知道方法调用相对于整个活动中的重要性 某个时间段
    在这里插入图片描述

线程状态

  • 在调用树的顶部有几个视图参数,用于更改所显示的类型和范围 分析数据。默认情况下,所有线程都是累积的。JProfiler 基于每个线程维护 CPU 数据,并且 您可以显示单个线程或线程组。

火焰图

  • 查看调用树的另一种方法是作为火焰图。您可以显示整个调用树或其中的一部分 作为火焰图,通过调用关联的调用树分析
    在这里插入图片描述

内存信息跟踪

  • 选择Telemetries-Memory即可查看内存整体占用情况。
    在这里插入图片描述

  • 选择Live memory-All objects可查看当前时刻内存对象统计信息。
    在这里插入图片描述

  • 点击Mark Current可以创建当前时刻内存对象基线,且可以查看两次Mark期间对象的变化情况。首次mark
    在这里插入图片描述

  • 第二次mark
    在这里插入图片描述

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

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

相关文章

初识linux之网络基础概念

目录 一、网络发展 1. 独立模式 2. 网络互联 二、认识协议 1. 为什么要有协议 2. 什么是协议 三、网络协议初识 1. 协议分层 2. 协议分层的优点 3. 理解分层 4. OSI七层模型 4.1 概念 4.2 模型形式 4.3 各层的作用 5. TCP/IP五层&#xff08;或四层&#xff09…

书评 | 《深入理解高并发编程:JDK核心技术》

书评 | 《深入理解高并发编程&#xff1a;JDK核心技术》 作者简介 冰河&#xff1a;互联网资深技术专家、数据库技术专家、分布式与微服务架构专家&#xff1b;多年来一直致力于分布式系统架构、微服务、分布式数据库、分布式事务与大数据技术的研究&#xff0c;在高并发、高可…

MySQL高级篇——关联查询和子查询优化

导航&#xff1a; 【黑马Java笔记踩坑汇总】Java基础进阶JavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线设计模式牛客面试题 目录 1. 关联查询优化 1.0 优化方案 1.1 数据准备 1.2 左外连接&#xff1a;优先右表创建索引&#xff0c;连接字段类型要一致…

numpy-stl实战3D建模【Python】

想象一下&#xff0c;我们需要用 python 编程语言构建某个物体的三维模型&#xff0c;然后将其可视化&#xff0c;或者准备一个文件以便在 3D 打印机上打印。 有几个库可以解决这些问题。 让我们来看看&#xff0c;如何在 Python 中从点、边和图元构建 3D 模型。 如何执行基本的…

如何对图片进行卷积计算

1 问题 如何对图片进行卷积计算&#xff1f; 2 方法 先导入torch和torch里的nn类&#xff0c;然后设置一个指定尺寸的随机像素值的图片&#xff0c;然后使用nn.conv2d函数进行卷积计算&#xff0c;然后建立全连接层&#xff0c;最后得到新的图片的尺寸 步骤: (1) 导入实验所需要…

CyberLink的音频编辑软件AudioDirector Ultra 13.4版本在win10系统的下载与安装配置教程

目录 前言一、AudioDirector Ultra安装二、使用配置总结 前言 AudioDirector Ultra是由CyberLink公司开发的一款强大的音频编辑工具&#xff0c;旨在为用户提供全面的音频后期制作和编辑解决方案。该软件支持多种音频格式&#xff0c;包括MP3、WAV、M4A等&#xff0c;并且可以…

网络工程师精选习题详解(二)

请点击↑关注、收藏&#xff0c;本博客免费为你获取精彩知识分享&#xff01;有惊喜哟&#xff01;&#xff01; 201.通常使用&#xff08;&#xff09;为IP数据报进行加密。 A.IPSec B.PP2P C.HTTPS D.TLS 答案&#xff1a;A IP Sec可以为IP数据报进行加密。 …

【004hive基础】hive的文件存储格式与压缩

文章目录 一.hive的行式存储与列式存储二. 存储格式1. TEXTFILE2. ORC格式3. PARQUET格式 ing 三. Hive压缩格式1. mr支持的压缩格式:2. hive配置压缩的方式:2.1. 开启map端的压缩方式:2.2.开启reduce端的压缩方式: 四. hive中存储格式和压缩相结合五. hive主流存储格式性能对比…

【分立元件】MOSFET的工作原理

MOSFET适用于瓦至十数千瓦的中小功率,特别适用于电源管理行业的入门学习。IGBT和MOSFET使用相似,但属于中大功率场合才使用,如果想使用好IGBT,也要先学习MOSFET。 对于MOSFET的学习我们需要学习它的工作原理,知道MOSFET的主要参数,MOSFET的开关过程以及如何驱动MOSFET,应…

技术最强,干活最多,但不会来事,又不是嫡系,得不到领导重用,这种情况去创业公司会不会好点?...

能力强但情商不高&#xff0c;许多程序员都有这样的问题&#xff0c;这种情况怎么办&#xff1f; 一位程序员问&#xff1a; 组内技术能力最强&#xff0c;干活最多&#xff0c;解决不了的问题就会派他上&#xff0c;领导嘴上认可&#xff0c;但因为他不会来事&#xff0c;又不…

一文搞定十大排序算法

文章目录 概述冒泡排序 (Bubble Sort)算法步骤图解算法代码实现算法分析 选择排序 (Selection Sort)算法步骤算法图解代码实现算法分析 插入排序(Insertion Sort)算法步骤图解算法代码实现算法分析 希尔排序 (Shell Sort)算法步骤图解算法代码实现算法分析 归并排序 (Merge Sor…

多维时序 | MATLAB实现GA-LSTM遗传算法优化长短期记忆网络的多变量时间序列预测

多维时序 | MATLAB实现GA-LSTM遗传算法优化长短期记忆网络的多变量时间序列预测 目录 多维时序 | MATLAB实现GA-LSTM遗传算法优化长短期记忆网络的多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 MATLAB实现GA-LSTM遗传算法优化长短期记忆网络的数据多…

系统集成实验模拟总公司和分公司之间通信(涉及mpls vxn,链路聚合,nat,vlan划分,单臂路由,dhcp....)

目录 一 需求描述 二 需求分析 三 实验拓扑 四 实验配置 4.1 总公司 4.1.1 vlan间通信 4.1.2 dhcp自动分配ip 配置地址池 接口开启dhcp 4.1.3 链路聚合 4.1.4 ospf实现内网通信 4.2 分公司 4.2.1 单臂路由 4.2.2 dhcp自动获取ip 4.2.3 ospf实现内网通信 4.3 mp…

判断传入数据是否为列表、数组、数据框等数据结构pd.api.types.is_list_like()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 判断传入数据是否为 列表、数组、数据框等数据结构 pd.api.types.is_list_like() 选择题 下列说法错误的是? import pandas as pd import numpy as np print("【执行】pd.api.ty…

基于html+css的图展示85

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

深度学习之使用Keras构建分类问题的MLP神经网络——用于糖尿病预测

大家好&#xff0c;我是带我去滑雪&#xff01; Keras 是一个用于构建和训练深度学习模型的高级 API&#xff0c;它基于 Python编写&#xff0c;并能够运行于 TensorFlow, CNTK, 或者 Theano 等深度学习框架之上。Keras简化了深度神经网络的构建流程&#xff0c;让用户能够更加…

云计算基础——云计算主流解决方案

原数据&#xff1a;描述数据的数据&#xff0c;不可分割。 7.1 Google云计算技术 7.1.1 GCP Google 将这些技术组合在一起&#xff0c;运用这些从自身业务需求出发&#xff0c;逐步发展起来的一系列云计算技术和工具搭建起了其面向商业的云计算解决方案Google Cloud Platform (…

【数据湖架构】Azure Data Lake数据湖指南

数据湖漫游指南 文件大小和文件数文件格式分区方案使用查询加速我如何管理对我的数据的访问&#xff1f;我选择什么数据格式&#xff1f;如何管理我的数据湖成本&#xff1f;如何监控我的数据湖&#xff1f;ADLS Gen2 何时是您数据湖的正确选择&#xff1f;设计数据湖的关键考虑…

Vue.observable的理解

一、Observable 是什么 Observable 翻译过来我们可以理解成可观察的 先来看其在Vue中的定义 Vue.observable&#xff0c;让一个对象变成响应式数据。Vue 内部会用它来处理 data 函数返回的对象 返回的对象可以直接用于渲染函数和计算属性内&#xff0c;并且会在发生变更时触发…

PDF.js实现按需分片加载pdf文件-包含前后端开发源码和详细开发教程

PDF.js实现按需加载pdf文件 说明前言前端项目分片加载的效果前端项目结构前端核心代码项目运行与访问 后端项目项目结构核心代码实现注意事项 项目源码 说明 本文主要是介绍pdf.js的前后端项目的实现&#xff0c;包含可直接运行的源码。由于本人偏向于后端开发&#xff0c;因此…