# YourKit Java Profiler 教程

news2024/12/21 23:14:40

YourKit Java Profiler 教程

文章目录

  • YourKit Java Profiler 教程
    • 本教程软件版本说明
      • YourKit
      • IntelliJ Idea
    • 系统要求
    • 探查器体系结构
      • 探查器代理
      • 探查器用户界面
    • 开始分析
      • 集成环境集成
        • IntelliJ Idea 安装插件
        • IntelliJ Idea分析
    • 解决性能问题
      • 性能瓶颈
      • 优化内存使用
      • 内存泄漏
      • 垃圾分配过多
    • 中央处理器分析
      • 采样
    • 死锁检测器
    • 垃圾回收
      • 垃圾回收遥测
    • 实际使用
      • sql执行耗时场景
        • 查看数据库执行情况界面
      • 模拟 OOM
      • 模拟死锁

官网教程地址:YourKit Java Profiler help

本教程软件版本说明

YourKit

  • YourKit Java Profiler 2022.9-b171
  • 安装教程:YourKit 2022 使用教程-CSDN社区

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);
    }
}

在这里插入图片描述

模拟死锁

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

在这里插入图片描述

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

在这里插入图片描述

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

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

相关文章

数据结构 | 双向链表

一、数据结构定义 /* 链表结点 */ typedef int ListType; typedef struct node {ListType data; // 存放整型数据struct node* llink, * rlink; // 指向前驱和后继结点的指针 } *Node;/* 双向链表头结点 */ typedef struct headNode {struct node* head, * tail; // 指向双向链…

IP 扫描程序:轻松发现、扫描和跟踪 IP 空间

什么是 IP 扫描 IP 扫描是实时持续监控网络 IP 地址空间的过程。包括 ICMP ping 扫描和 SNMP 扫描在内的网络协议数量用于扫描网络中的 IP 地址。网络管理员依靠 IP 扫描程序轻松检查和管理 IP 地址空间。使用网络 IP 扫描程序进行 IP 扫描可查看 IP 地址空间利用率和性能。 …

C# 使用CefSharp控件 High DPI问题的解决

使用CefSharp控件&#xff0c;在部分高分辨率的电脑中&#xff08;显示缩放比例非100%&#xff0c;而是120%或者125%等&#xff09;会出现以下一些情况&#xff1a; 显示的页面中出现了黑边&#xff0c;且按钮定位也偏了&#xff0c;比如点击【图层】按钮&#xff0c;需要点击上…

selenium用法

一、请求库selenium selenium是一个自动化测试工具&#xff0c;而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题。操作浏览器模拟人的行为。 下载浏览器驱动&#xff1a;以谷歌浏览器为例---->谷歌浏览器驱动&#xff08;版本号对应&#xff09; …

K8S应用生命周期管理

K8S应用生命周期管理. 1 应用周期管理1.1 资源对象1.1.1 基础知识1.1.2 资源属性 1.2 Pod基础1.2.1 Pod概述1.2.2 简单实践1.2.3 流程解读1.2.4 应用解析1.2.5 初始化容器1.2.6 Sidecar实践1.2.7 静态POD实践 1.3 Pod进阶1.3.1 Pod探测机制1.3.2 命令探测1.3.3 TCP探测1.3.4 HT…

C# +.Net医院检验科LIS系统源码 实验室信息系统源码

实验室信息系统&#xff08;Laboratory Information System&#xff0c;缩写LIS&#xff09;是一类用来处理实验室过程信息的软件。这套系统通常与其他信息系统比如医院信息系统&#xff08;HIS&#xff09;连接。实验室信息系统由多种实验室流程模块构成&#xff0c;这些模块可…

79-基于stm32单片机酒精浓度测量疲劳驾驶检测系统(程序+原理图+元件清单全套资料)...

资料编号&#xff1a;079 功能介绍&#xff1a;采用stm32单片机作为主控CPU&#xff0c;采用MQ3传感器采集酒精浓度&#xff0c;采用红外接触传感器感应驾驶员上车时间&#xff0c;OLED显示酒精浓度和驾驶时间&#xff0c;当酒精浓度超过阈值&#xff08;程序可调&#xff09;&…

【QT】——多线程的使用

目录 基本概念 1.线程类QThread 1.1信号和槽 1.2静态函数 1.3 任务处理函数 2.实例 第一种方式 第二种方式 基本概念 默认的线程在Qt中称之为窗口线程&#xff0c;也叫主线程&#xff0c;负责窗口事件处理或者窗口控件数据的更新子线程负责后台的业务逻辑处理&#xff…

Rocky Linux能否通过其他方法合法地获得RHEL源代码?让我们一起来看看吧

在红帽公司限制对RHEL源代码的访问后&#xff0c;Rocky Linux寻找了替代方案来确保他们可以继续获取所需的源代码并行使他们的权利。他们认为这种限制违反了开源的精神和目的&#xff0c;因此积极寻求解决方案&#xff0c;以维护他们对开源软件的承诺。那么Rocky Linux能否通过…

AOM、VTM初体验及安装tensorflow

AOM、VTM初体验 Cmake cmake的定义是什么 &#xff1f;-----高级编译配置工具 当你用不同的语言或者编译器开发一个项目&#xff0c;各就各位code完之后要生成最终的输出&#xff08;dll 或执行文件&#xff09;&#xff0c;这时候就尴尬了&#xff0c;你要手动去MingGW或者…

Kotlin 1.9 新特性预览:data object (数据单例)

前言 data object (数据单例) 是 Kotlin 1.9 中预定引入的新特性 &#xff0c;但其实从 1.7.20 开始就可以预览了。启动预览需要在 gradle 中升级 KotlinCompileVersion&#xff1a; tasks.withType<KotlinCompile> {kotlinOptions.languageVersion "1.9" }…

四、交换网络实验3——VTP配置

更多网络基础内容可见: 网络基础学习目录及各章节指引 4.6.3 VTP配置 实验目的 学习思科私有协议VTP的配置方法,观察VTP三种工作模式的通信方式 实验工具 Cisco Packet Tracer Student 软件 实验环境 安装模拟器的Windows系统 实验步骤 第一步:根据拓扑图,选择三台同…

老胡的周刊(第097期)

老胡的信息周刊[1]&#xff0c;记录这周我看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 &#x1f3af; 项目 Chat2DB[2] Chat2DB 是一款有开源免费的智能…

二分查找--图文详解

二分查找 1. 什么是二分查找2. 原理3. 例子3.1 当数组长度为奇数3.1 当数组长度为偶数3.3 实现过程 4. 顺序查找与二分查找的区别结束语 1. 什么是二分查找 二分查找也称折半查找&#xff0c;是在一组有序(升序/降序)的数据中查找一个元素&#xff0c;它是一种效率较高的查找方…

chatgpt赋能python:重新配置PyCharm,让你的Python编程更加高效

重新配置PyCharm&#xff0c;让你的Python编程更加高效 PyCharm是一个流行的Python集成开发环境&#xff0c;被广泛用于Python编程。但是&#xff0c;有时候我们需要重新配置PyCharm以适应特定的工作需求或优化其性能&#xff0c;这篇文章将讨论如何重新配置PyCharm&#xff0…

K8S安全管理

1 安全管理 1.1 安全框架 1.1.1 认证框架 学习目标 这一节&#xff0c;我们从 基础知识、认证流程、小结 三个方面来学习。 基础知识 资源操作 用户访问k8s业务应用的流程&#xff1a;方法一&#xff1a;无需api_server认证用户 -- ingress|service -- pod方法二&#xf…

Transformer面试题总结

1.框架 Transformer和seq2seq一样由解码器和编码器组成&#xff0c;用多头注意力替换编码器和解码器架构中最常用的循环层 1.1 编码器&#xff1a;编码器有一堆N6的相同层组成&#xff0c;每一层有两个子层&#xff0c;第一个子层包含多头注意力机制&#xff0c;第二个子层是前…

Spring MVC相关注解运用 —— 中篇

目录 一、RESTful风格支持 1.1 RESTful风格介绍 1.2 postman使用 二、PathVariable 2.1 实例程序 2.2 测试结果 三、PostMapping、GetMapping、PutMapping、DeleteMapping 四、HiddenHttpMethodFilter 4.1 在web.xml配置过滤器 4.2 控制器方法 4.3 JSP页面 4.4 测…

数据库管理工具DBeaver 连接 TDengine详细教程

数据库管理工具DBeaver 连接 TDengine 一、介绍二、前置条件2.1 TDEngine安装 2.2 DBeaver 下载及安装三、DBeaver 连接 TDengine 一、介绍 Dbeaver是一款功能强大的数据库管理工具&#xff0c;支持任何拥有 JDBC-Driver 的数据库。TDengine是一款由涛思数据开发的国产的时序数…

【网络编程】网络编程套接字(二)简单的UDP网络程序

文章目录 服务器编程1.创建服务端套接字2.绑定服务端套接字3.服务端启动 客户端编程1.创建客户端套接字2.绑定客户端套接字 服务器和客户端测试 服务器编程 1.创建服务端套接字 使用socket函数调用可以创建套接字的文件描述符&#xff0c;与前边的文件类似&#xff0c;socket…