JVM分析工具JProfiler介绍及安装

目录

一、什么是JProfiler?

[二、JProfiler 功能结构](#二、JProfiler 功能结构)

1、分析代理

2、记录数据

3、快照

三、安装

一、什么是JProfiler?

JProfiler是一个专业的工具,用于分析运行中的JVM内部发生的事情。当您的生产系统出现问题时,您可以在开发、质量保证和消防任务中使用它。

JProfiler主要处理四个主题:

  • 方法调用

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

  • 分配

分析堆上对象的分配、引用链和垃圾收集属于"内存分析"类别。此功能使您能够修复内存泄漏,通常使用较少的内存,并分配较少的临时对象。

  • 线程和锁

线程可以持有锁,例如通过对对象进行同步。当多个线程协作时,可能会发生死锁,JProfiler可以为您可视化它们。此外,锁可以被争用,这意味着线程必须等待才能获取它们。JProfiler提供了对线程及其各种锁定情况的深入了解。

  • 更高级别的子系统

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

JProfiler的UI是作为桌面应用程序提供的。您可以在不使用UI的情况下以交互方式评测实时JVM或自动评测。评测数据持久化在快照中,这些快照可以使用JProfiler UI打开。此外,命令行工具和构建工具集成可帮助您自动化分析会话。

二、JProfiler 功能结构

下面给出了所有重要交互的全貌,这些交互涉及概要应用程序、JProfiler UI和所有命令行实用程序。

1、分析代理

"JVM工具接口"(JVMTI)是一个本机接口,探查器使用它来访问信息并添加用于插入自己的检测的挂钩。这意味着分析代理的至少一部分必须实现为本机代码,因此JVM分析程序不是独立于平台的。JProfiler支持网站上列出的一系列平台。

JVM探查器被实现为在启动时或稍后某个时候加载的本机库。要在启动时加载它,将在命令行中添加VM参数-agentpath:<path To native library>。您很少需要手动添加这个参数,因为JProfiler会为您添加它,例如在IDE集成、集成向导中,或者如果它直接启动JVM。然而,重要的是要知道,这就是启用概要分析的原因。

如果JVM成功地加载了本机库,它会调用库中的一个特殊函数,为评测代理提供初始化自己的机会。然后,JProfiler将打印两条以JProfiler>为前缀的诊断消息,这样您就知道评测是活动的。最重要的是,如果您传递-agentpath VM参数,则分析代理要么成功加载,要么JVM没有启动。

加载后,概要分析代理会要求JVMTI收到各种事件的通知,例如线程创建或类加载。其中一些事件直接传递分析数据。使用类加载事件,分析代理在加载类时插入类,并插入自己的字节码来执行测量。

JProfiler可以通过使用JProfilerUI或使用bin/jpenable命令行工具。在这种情况下,可能需要重新转换大量已经加载的类,以便应用所需的工具。

2、记录数据

JProfiler代理只收集分析数据。JProfiler UI是单独启动的,并通过套接字连接到分析代理。这意味着,无论评测JVM是在本地机器上还是在远程机器上运行,这实际上都无关紧要------评测代理和JProfiler UI之间的通信机制始终相同。

从JProfiler UI,您可以指示代理记录数据,在UI中显示分析数据,并将快照保存到磁盘。作为UI的替代方案,可以通过其MBean来控制概要分析代理。使用此MBean的命令行工具是bin/jpcontroller。

控制评测代理的另一种方式是使用一组预定义的触发器和操作。通过这种方式,分析代理可以在无人参与模式下运行。这在JProfiler中被称为"离线评测",对于自动化评测会话非常有用。

3、快照

虽然JProfiler UI可以显示实时评测数据,但通常需要保存所有记录的评测数据的快照。快照可以手动保存在JProfiler UI中,也可以通过触发操作自动保存。

快照可以在JProfiler UI中打开和比较。对于自动化处理,命令行工具bin/jpexport和bin/jpcompare可以用于从以前保存的快照中提取数据并创建HTML报告。

从运行中的JVM获取堆快照的一种低开销方法是使用bin/jpdump命令行工具。它使用JVM的内置功能来保存HPROF快照,该快照可以由JProfiler打开,并且不需要加载评测代理。

三、安装

下载:ej-technologies - Java APM, Java Profiler, Java Installer Builder

为Windows和Linux/Unix提供了可执行安装程序,引导您逐步完成安装。如果检测到以前的安装,则会简化安装。

在macOS上,JProfiler使用UI应用程序的标准安装过程:提供了一个DMG存档,您可以双击它安装在Finder中,然后您可以将JProfileer应用程序捆绑包拖动到/applications文件夹。该文件夹在DMG中作为符号链接可见。

在Linux/Unix上,安装程序在下载后是不可执行的,所以在执行它们时必须预先加上sh。如果传递参数-c,安装程序将执行命令行安装。使用参数-q执行Windows和Linux/Unix的完全无人值守安装。在这种情况下,您可以传递额外的参数-dir<directory>来选择安装目录。

运行安装程序后,它将保存一个文件.install4j/response.varfile,其中包含所有用户输入。通过在命令行上传递参数-varfile<path to response.varfile>,您可以获取该文件并使用它来自动执行无人参与的安装。

要设置无人参与安装的许可信息,请将-Vjprofiler.licenseKey=<license-key>-Vjprofiler.licenseName=<username>和-Vjprofiller.licenseCompany=<companyName>作为命令行参数(可选)。如果您有浮动许可证,请使用FLOAT:<服务器名称或IP地址>而不是许可证密钥。

对于Windows,归档文件也以ZIP文件的形式提供,对于Linux,归档文件则以.tar.gz文件的形式。命令

复制代码
tar xzvf filename.tar.gz

将把.tar.gz档案提取到一个单独的顶级目录中。要启动JProfiler,请在提取的目录中执行bin/JProfiler。在Linux/Unix上,文件jprofiler.desktop可用于将jprofiler可执行文件集成到窗口管理器中。例如,在Ubuntu上,您可以将桌面文件拖动到启动器侧栏中,以便创建一个永久的启动器项。

将分析代理分发到远程计算机

JProfiler有两个部分:一方面是桌面UI和操作快照的命令行实用程序,另一方面是评测代理和控制评测JVM的命令行应用程序。您从网站下载的安装程序和档案包含这两部分。

但是,对于远程评测,您只需要在远程端安装评测代理。虽然您可以在远程机器上使用JProfiler分发版简单地提取存档,但您可能希望限制所需文件的数量,尤其是在自动化部署时。此外,评测代理是可自由重新分发的,因此您可以将其与应用程序一起发货,也可以将其安装在客户机器上进行故障排除。

要获得带有评测代理的最小软件包,远程集成向导会向您显示相应代理存档的下载链接,以及包含所有受支持平台的代理存档文件的下载页面。在JProfiler GUI中,调用会话->集成向导->新建服务器/远程集成,选择"远程"选项,然后继续执行远程安装目录步骤。

特定JProfiler版本的HTML概述页面的URL为:

复制代码
https://www.ej-technologies.com/download/jprofiler/agent?version=13.0.7

单个代理存档的下载URL的格式为:

复制代码
https://download.ej-technologies.com/jprofiler/jprofiler_agent_<platform>_13_0_7.<extension>

其中platform对应于bin目录中的代理目录名,扩展名在Windows上为zip,在macOS上为.tgz,在Linux/Unix上为.tar.gz。对于Linux,x86和x64组合在一起,因此对于Linux x64,URL为:

复制代码
https://download.ej-technologies.com/jprofiler/jprofiler_agent_linux-x86_13_0_7.tar.gz

代理存档包含所需的本机代理库以及jpenable,jpdump和jpcontroller可执行文件。归档文件中的可执行文件只需要Java 6作为最低版本,而评测代理可用于Java 5或更高版本。

在远程计算机上提取代理存档后,您看到的子目录如下所述。它们是各自目标平台上完整JProfiler安装的子集。

相关推荐
L.EscaRC几秒前
面向 Spring Boot 的 JVM 深度解析
jvm·spring boot·后端
学到头秃的suhian17 小时前
JVM-类加载机制
java·jvm
NEFU AB-IN1 天前
Prompt Gen Desktop 管理和迭代你的 Prompt!
java·jvm·prompt
唐古乌梁海1 天前
【Java】JVM 内存区域划分
java·开发语言·jvm
众俗1 天前
JVM整理
jvm
echoyu.1 天前
java源代码、字节码、jvm、jit、aot的关系
java·开发语言·jvm·八股
代码栈上的思考2 天前
JVM中内存管理的策略
java·jvm
thginWalker2 天前
深入浅出 Java 虚拟机之进阶部分
jvm
沐浴露z2 天前
【JVM】详解 线程与协程
java·jvm
thginWalker2 天前
深入浅出 Java 虚拟机之实战部分
jvm