# YourKit Java Profiler 教程

YourKit Java Profiler 教程

官网教程地址:YourKit Java Profiler help

本教程软件版本说明

YourKit

IntelliJ Idea

  • IntelliJ IDEA 2022.3.2 (Ultimate Edition)

系统要求

  • YourKit Java Profiler 由两部分组成:分析器 UI(桌面应用程序)和 加载到 Java 虚拟机 (JVM) 中的探查器代理程序。 探查器 UI 和探查器代理可以在具有不同 操作系统,因此它们有不同的系统要求。

探查器体系结构

  • YourKit Java Profiler 由两部分组成,通过网络交互:profiler 代理和 profiler UI
    在这里插入图片描述

探查器代理

  • Java虚拟机的插件。 它可以在启动时加载到 JVM 中,借助特殊的命令行选项,或者它可能会稍后附加到正在运行的 JVM-agentpath -agentlib代理使用操作系统 APIJVMTI 和字节码检测 以收集性能数据。 为了与其他应用程序通信,代理会打开 TCP/IP 套接字并侦听其上的命令。

探查器用户界面

  • 探查器UI(或简称 UI)是一个桌面应用程序。UI 可以连接到探查器代理以更改分析模式并获取 实时性能数据。UI 能够将性能数据保存到 用于进一步离线分析的快照。

开始分析

您可以使用不同的选项来开始分析应用程序:

  • Profiler 与大多数流行的 Java IDE 无缝集成。 安装插件后,您将能够分析所有类型的 Java 直接来自 IDE 的应用程序。
  • 如果要分析独立的Java服务器(TomcatJetty等)或应用程序, 您可以使用 Java 服务器集成向导。
  • 将探查器附加到正在运行的应用程序。
  • 在以下情况下,可以远程完成分析: 应用程序在另一台计算机上运行。
  • Docker容器中进行分析。
  • 手动启用应用程序的分析

集成环境集成

IDE 集成提供:

  • 能够直接从 IDE 启动分析的应用程序
  • 从分析结果到分析的应用程序源代码的轻松导航
    在这里插入图片描述
IntelliJ Idea 安装插件

在这里插入图片描述

  • next之后选择 Idea 安装插件的目录

在这里插入图片描述

  • 如果重启 Idea 时候报错:到刚才选择的插件的目录将yourkit-for-idea.jar移出来,使用 Idea从硬盘安装插件的方式安装即可成功。
com.intellij.diagnostic.PluginException: Fatal error initializing 'com.yourkit.ideaPlugin.Plugin' [Plugin: YourKit Java Profiler 2022.9-b171 Integration]
  • 安装之后重启 Idea
IntelliJ Idea分析
  • 启动需要分析的项目
    在这里插入图片描述

  • 启动成功 YourKit 界面如下

在这里插入图片描述

解决性能问题

性能瓶颈

  • 使用探查器运行应用程序
  • 连接到应用程序
  • 在任务启动之前立即启动 CPU 分析
  • 等到任务完成或执行足够长的时间
  • 捕获性能快照
  • 打开快照并使用 CPU 选项卡
    优化内存使用

优化内存使用

  • 使用探查器运行应用程序
  • 连接到应用程序。不要记录分配,因为它们不是解决此任务所必需的。
  • 捕获内存快照。
  • 打开快照并使用对象视图

内存泄漏

  • 内存遥测: 通过观察已用内存的增长。 您可以使用强制垃圾回收来 立即查看是否可以收集一些消耗内存的对象,从而 减少已用内存。如果在 2-3 次显式垃圾回收后,使用的内存仍然存在 在同一水平或减少不显着,这可能意味着您有泄漏。 (可能”,因为它可能不是泄漏,而只是高 内存消耗 – 了解如何处理这种情况)还要考虑高内存使用率捕获快照功能。 使用此功能自动捕获的快照可能会在状态中捕获 当内存使用量由于内存泄漏而达到指定的阈值时。 因此,快照将提供足够的信息来发现和修复泄漏。

  • 若要检测内存泄漏,请使用以下方案:

    • 连接到分析的应用程序

    • 在执行怀疑导致泄漏的任务之前提前生成编号。

    • 让应用程序执行任务。

    • 捕获内存快照并将其打开。

    • 使用世代”视图查看在任务执行期间创建的对象;泄漏的对象应该在其中。

垃圾分配过多

  • 使用探查器运行应用程序
  • 连接到应用程序
  • 垃圾回收遥测将帮助你估计垃圾回收器负载。

中央处理器分析

  • 当探查器连接到所分析的应用程序时, 工具栏包含以下 CPU 分析控件:
在这里插入图片描述捕获性能快照并保存性能分析结果 到文件进行全面分析
在这里插入图片描述在这里插入图片描述启动/停止 CPU 分析。
在这里插入图片描述重置记录的 CPU 分析结果并继续 CPU 分析。
  • 实时结果
    • 启动 CPU 分析后,结果立即可用 在调用树中 - 合并所有线程、调用树 - 按线程、CPU 选项卡上的火焰图和方法列表部分。
    • CPU 跟踪的情况下,将显示方法时间和调用计数。 在 CPU 采样的情况下,仅显示时间。

在这里插入图片描述

  • 完成测量并获得结果:当您打算分析的任务已完成(或已执行足够长的时间)时, 捕获包含所有记录信息的性能快照。

在这里插入图片描述

  • 从探查器 UI 完成此操作后,可以打开结果进行即时分析。

采样

  • 采样是 CPU 分析模式之一。
  • 使用采样时,探查器会定期查询堆栈和正在运行的线程的时间 以估计代码中最慢的部分。 在此模式下,方法调用计数不可用。
  • 使用探查器工具栏启动 CPU 采样,如下图所示。 还有启动 CPU 分析的替代方法。

死锁检测器

  • 如果在所分析的应用程序中发生 Java 级死锁,则会自动检测到锁。连接到分析的应用程序时, 切换到死锁选项卡。

垃圾回收

垃圾回收遥测

  • 内存选项卡中显示的垃圾回收遥测图 将帮助您估计垃圾回收器负载。 如果垃圾回收需要大量时间,建议 运行对象分配记录以精确定位和优化有问题的代码。垃圾回收和GC 中花费的时间图表始终可用。

在这里插入图片描述

实际使用

sql执行耗时场景

  • 场景描述:总共有10 万数据,接口需要将这 10 万数据进行写入到表中
  • 操作这个功能,这里测试使用Apifox直接调用接口,使用YourKit捕获快照,打开快照进行分析
查看数据库执行情况界面
  • 通过下入中展示的发现,insert语句执行耗时较长,直接发现了问题所在
  • 找到执行慢的sql使用sql优化的方式对这个sql进行分析优化

在这里插入图片描述

模拟 OOM

  • 不断的查询结果放到集合中
@Override
public void outOfMemory() {
    List<TableClazzDO> userList = new ArrayList();
    while (true) {
        List<TableClazzDO> tableClazzDOS = tableClazzDOMapper.selectByExample(new TableClazzDOExample());
        userList.addAll(tableClazzDOS);
    }
}

在这里插入图片描述

模拟死锁

  • 查看线程情况界面如下:点击线程可以大概排查出发生死锁的位置,这个界面可以找到发生阻塞的线程

在这里插入图片描述

  • 在死锁的这个界面也可以直接看到有死锁的地方,通过这个可以大致定位到死锁的线程并处理这个问题

在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全栈程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值