使用JProfiler进入JVM分析

 要评测JVM,必须将JProfiler的评测代理加载到JVM中。这可以通过两种不同的方式发生:在启动脚本中指定-agentpath VM参数,或者使用attach API将代理加载到已经运行的JVM中。
JProfiler支持这两种模式。添加VM参数是评测的首选方式,集成向导、IDE插件和会话配置都会使用它来从JProfiler中启动JVM。连接可以通过SSH在本地和远程进行。

一、-agentpath VM参数

了解加载评测代理的VM参数是如何组成的非常有用。-agentpath是JVM提供的一个通用VM参数,用于加载任何类型的使用JVMTI接口的本机库。因为评测接口JVMTI是本机接口,所以评测代理必须是本机库。这意味着您只能在明确支持的平台上进行评测。32位和64位JVM也需要不同的本机库。另一方面,Java代理加载了-javaagent-VM参数,并且只能访问有限的一组功能。
在-agentpath:之后,将附加到本机库的完整路径名。有一个等效的参数-agentlib:您只指定特定于平台的库名称,但必须确保库包含在库路径中。在库的路径之后,可以添加等号并将选项传递给代理,选项之间用逗号分隔。例如,在Linux上,整个参数可能如下所示:

-agentpath:/opt/jprofiler10/bin/linux-x64/libjprofilerti.so=port=8849,nowait

     第一个等号将路径名与参数分隔开,第二个等号是参数port=8849的一部分。这个通用参数定义了评测代理侦听JProfiler GUI连接的端口。8849实际上是默认端口,因此您也可以省略该参数。但是,如果您想在同一台机器上评测多个JVM,则必须分配不同的端口。IDE插件和本地启动的会话会自动分配此端口,对于集成向导,您必须明确选择端口。
     第二个参数nowait告诉评测代理不要在启动时阻塞JVM,等待JProfiler GUI连接。启动时阻止是默认的,因为评测代理不会将其评测设置作为命令行参数接收,而是从JProfiler GUI或配置文件接收。命令行参数仅用于引导评测代理,告诉它如何启动以及传递调试标志。
      默认情况下,JProfiler代理将通信套接字绑定到所有可用的网络接口。如果出于安全原因不需要这样做,您可以添加选项address=[IP address],以便选择一个特定的接口或环回,只侦听来自本地机器的请求。后者是为JProfiler UI或IDE集成启动的JVM自动添加的。

二、本地启动的会话

就像IDE中的“运行配置”一样,您可以直接在JProfiler中配置本地启动的会话。指定类路径、主类、工作目录、VM参数和自变量,JProfiler将为您启动会话。JProfiler附带的所有演示会话都是本地启动的会话。

一种特殊的启动模式是“Web Start”,您可以选择JNLP文件的URL,JProfiler将启动JVM来对其进行评测。此功能支持OpenWebStart,不支持Java 9之前的Oracle JRE中的遗留WebStart。 

 通过从主菜单中调用会话->转换向导,可以使用转换向导将本地启动的会话转换为独立会话。将Application Session转换为Remote只需创建一个启动脚本,并将-agentpath VM参数插入Java调用中。将应用程序会话转换为脱机会创建一个脱机评测的启动脚本,这意味着在启动时加载配置,不需要JProfiler GUI。将应用程序会话转换为Redistributed会话也可以执行同样的操作,但会在其旁边创建一个目录jprofiler_dist,其中包含评测代理和配置文件,这样您就可以将其发送到未安装jprofiler的其他计算机。

如果您自己开发分析的应用程序,请考虑使用IDE集成,而不是启动会话。它将更加方便,并为您提供更好的源代码导航。如果您不是自己开发应用程序,但已经有了启动脚本,请考虑使用远程集成向导。它将告诉您必须添加到Java调用中的确切VM参数。

三、集成向导

JProfiler的集成向导使用启动脚本或配置文件来处理许多众所周知的第三方容器,这些脚本或配置可以通过编程方式进行修改,以包含额外的VM参数。对于某些产品,可以生成启动脚本,其中VM参数作为参数或通过环境变量传递。

在所有情况下,您都必须从第三方产品中找到一些特定的文件,因此JProfiler有必要的上下文来执行其修改。一些通用向导只向您提供有关必须执行哪些操作才能启用评测的说明。

 每个集成向导的第一步是选择在本地计算机上还是在远程计算机上进行配置文件。在本地机器的情况下,您必须提供较少的信息,因为JProfiler已经知道平台、JProfileer的安装位置及其配置文件的位置。

 一个重要的决定是上面讨论的“启动模式”。默认情况下,评测设置在启动时从JProfiler UI传输,但您也可以告诉评测代理让JVM立即启动。在后一种情况下,一旦JProfiler GUI连接,就可以应用配置文件设置。

 不过,您也可以指定一个配置文件和配置文件设置,这样效率会高得多。这是在配置同步步骤中完成的。这种情况下的主要问题是,每次在本地编辑分析设置时,都必须将配置文件与远程端同步。最优雅的方法是在远程地址步骤中通过SSH连接到远程机器,然后可以通过SSH自动传输配置文件。

 在集成向导结束时,将创建一个会话,开始分析,在非通用情况下,还启动第三方产品,如应用程序服务器。

 外部启动脚本由会话配置对话框的“应用程序设置”选项卡上的“执行启动脚本”和“执行停止脚本”选项处理,并且可以通过选中“使用URL打开浏览器”复选框来显示URL。这也是您可以更改远程机器地址和配置同步选项的地方。

集成向导都处理评测JVM在远程机器上运行的情况。但是,当必须修改配置文件或启动脚本时,必须将其复制到本地计算机,并将修改后的版本传输回远程计算机。直接运行命令行工具可能更方便jpintegrate在远程机器上,并让它就地执行修改。jpintegrate需要完整安装JProfiler,并且具有与JProfilerGUI相同的JRE要求。

 当启动远程评测会话时发生错误时,请参阅故障排除指南,以获取解决问题的步骤清单。

四、IDE集成

评测应用程序最方便的方法是通过IDE集成。如果您通常在开发过程中从IDE启动应用程序,那么IDE已经具备了所有必需的信息,JProfiler插件可以简单地添加VM参数进行评测,必要时启动JProfileer,并将评测的JVM连接到JProfiler主窗口。
所有IDE集成都包含在JProfiler安装的integrations目录中。原则上,该目录中的归档文件可以通过相应IDE中的插件安装机制手动安装。但是,安装IDE集成的首选方式是从主菜单中调用会话->IDE集成。 

 

IDE中的评测会话不会在JProfiler中获得自己的会话条目,因为这样的会话无法从JProfilerGUI启动。根据IDE中的设置,分析设置以每个项目或每次运行的配置为基础进行持久化。
当连接到IDE时,JProfiler在工具栏中显示一个窗口切换器,可以轻松地跳回到IDE中的相关窗口。现在,所有ShowSource操作都直接在IDE中显示源代码,而不是JProfiler中的内置源代码查看器。

五、附加模式

您不必事先决定要评测JVM。使用JProfiler中的附加功能,您可以选择一个正在运行的JVM并动态加载评测代理。虽然连接模式很方便,但它有几个缺点,您应该注意:

  • 您必须从正在运行的JVM列表中确定要评测的JVM。如果许多JVM在同一台机器上运行,这有时会很棘手。
  • 还有额外的开销,因为可能需要重新定义许多类才能添加插入。
  • JProfiler中的某些功能在附加模式下不可用。这主要是因为JVMTI的某些功能只能在JVM初始化时打开,而在JVM生命周期的后期阶段不可用。
  • 有些功能需要在所有类的很大一部分中插入。在加载类时进行检测是很便宜的,而在稍后加载类时添加检测则不然。使用附着模式时,默认情况下会禁用这些功能。
  • OpenJDK JVM、版本6或更高版本的Oracle JVM、最新的OpenJ9 JVM(8u281+、11.0.11+或Java 17+)或基于此类版本的IBM JVM都支持附加功能。不能为JVM指定VM参数-XX:+PerfDisableSharedMem和-XX:+DisableAttachMechanism。
  • JProfiler的启动中心中的Quick Attach选项卡列出了所有可以分析的JVM。列表项的背景色指示是否已加载分析代理、当前是否已连接JProfiler GUI或是否已配置脱机分析。
  • 启动分析会话时,可以在会话设置对话框中配置分析设置。当您重复配置同一进程时,您不希望一次又一次地重新输入同一配置,因此当您关闭使用快速连接功能创建的会话时,可以保存持久会话。下次要评测此进程时,请从“打开会话”选项卡而不是“快速连接”选项卡启动保存的会话。您仍然需要选择一个正在运行的JVM,但评测设置与您之前配置的设置相同。 

 

 六、附加到本地服务

JVM中的attach API要求调用进程以与要附加到的进程相同的用户身份运行,因此JProfiler显示的JVM列表仅限于当前用户。不同用户启动的流程大多是服务。连接到服务的方式因基于Windows、Linux和Unix的平台而异。
在Windows上,“附加”对话框有一个“显示服务”按钮,列出所有本地运行的服务。JProfiler启动桥接可执行文件,以便能够连接到这些进程,无论它们与哪个用户一起运行。

 在Linux上,JProfiler支持通过PolicyKit直接在UI中切换用户,PolicyKit是大多数Linux发行版的一部分。通过单击附加对话框中的切换用户,可以输入不同的用户名并使用系统密码对话框进行身份验证。

在包括macOS在内的基于Unix的平台上,您可以执行命令行工具jpenable作为不同的用户su或sudo,具体取决于您的Unix变体或Linux发行版。在基于macOS和Debian的Linux发行版(如Ubuntu)上,使用sudo。
用sudo命令:

sudo -u userName jpenable

对于su,所需的命令行是:

su userName -c jpenable

jpenable将允许您选择JVM,并告诉您评测代理正在侦听的端口。在启动中心的“快速连接”选项卡上,然后可以选择“在另一台计算机上”选项,并配置到localhost和给定配置文件端口的直接连接。

七、 连接到远程计算机上的JVM

最苛刻的评测设置是远程评测——JProfiler GUI在本地机器上运行,评测JVM在另一台机器上运行。对于将-agentpath VM参数传递到配置文件JVM的设置,您必须在远程计算机上安装JProfiler,并在本地计算机上设置远程会话。使用JProfiler中的远程连接功能,不需要进行此类修改,只需要SSH凭据即可登录到远程计算机。
SSH连接使JProfiler能够上传“安装JProfileer”帮助主题中讨论的代理程序包,并在远程计算机上执行包含的命令行工具。您不需要在本地机器上设置SSH,JProfiler自带实现。在最简单的设置中,您只需定义主机、用户名和身份验证。
通过SSH连接,JProfiler可以自动发现正在运行的JVM,或者连接到分析代理已经在侦听的特定端口。对于后一种情况,您可以使用jpenable或jpintegrate,并准备一个特殊的JVM进行评测。然后,可以将SSH远程连接配置为直接连接到配置的分析端口。

 自动发现将列出远程计算机上已作为SSH登录用户启动的所有JVM。在大多数情况下,这将不是启动您要配置文件的服务的用户。由于启动服务的用户通常不允许SSH连接,JProfiler添加了一个Switch User超链接,允许您使用sudo或su切换到该用户。

在复杂的网络拓扑中,有时无法直接连接到远程计算机。在这种情况下,您可以告诉JProfiler在GUI中使用多跳SSH隧道进行连接。在SSH隧道的末端,您可以建立一个直接的网络连接,通常连接到“127.0.0.1”。

 只能为使用SSH登录用户启动的JVM拍摄HPROF快照。这是因为HPROF快照需要一个中间文件,该文件是用启动JVM的用户的访问权限编写的。出于安全原因,无法将文件权限传输给SSH登录用户进行下载。对于完整的分析会话,不存在这样的限制。

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT在工作中的七种用途

1. 用 ChatGPT 替代谷歌搜索引擎 工作时,你一天会访问几次搜索引擎?有了 ChatGPT,使用搜索引擎的频率可能大大下降。 据报道,谷歌这样的搜索引擎巨头,实际上很担心用户最终会把自己的搜索工具换成 ChatGPT。该公司针对…

服务器出入口IP通俗理解

一、出口IP 这是机房的网络设备(如防火墙)给内网主机生成的一个外网IP,用来保证内网主机能和其他公网主机进行来回通信,通常作为其他接入方的IP白名单使用,一般有几台内网主机就有几个出口IP,出口IP通常和入…

想写几个上位机,是选择学c#还是 c++ qt呢?

C#基本也就上位机开发开发,另外做做日常用的小工具很方便。 结合PLC,以太网做上位机,这个基本上控制这块都比较有需求。 另外我们用C#也做一些工具的二次开发,感觉还行。 C用qt框架其实学习起来可能稍微复杂些,但是…

【STM32零基础入门教程03】GPIO输入输出之GPIO框图分析

本章节主要讲解点亮LED的基本原理,以及GPIO框图的讲解。 如何点亮LED(输出) 首先我们查看原理图,观察电路图中LED的连接情况,如下图可以看出我们的板子中LED一端通过限流电阻连接的PB0另一端连接的是高电平VCC&#xf…

visio,word添加缺少字体,仿宋_GB2312、楷体_GB2312、方正小标宋简体等字体下载

一. 内容简介 visio,word添加缺少字体,仿宋_GB2312、楷体_GB2312、方正小标宋简体等字体下载 二. 软件环境 2.1 visio 三.主要流程 3.1 下载字体 http://www.downza.cn/ 微软官方给的链接好多字体没有,其他好多字体网站,就是给你看个样式&#xff…

【具有非线性反馈的LTI系统识别】针对反馈非线性的LTI系统,提供非线性辨识方案(SimulinkMatlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

使用 AntV X6 + vue 实现单线流程图

使用 AntV X6 vue 实现单线流程图 X6 是 AntV 旗下的图编辑引擎,提供了一系列开箱即用的交互组件和简单易用的节点定制能力,方便我们快速搭建 DAG 图、ER 图、流程图等应用。 官方文档 安装 yarn add antv/x61.34.6Tips: 目前 X6 有 1.x…

使用IDEA操作Mysql数据库

idea中自带了关于数据库的连接 首先要确保你的MySQL正在运行中 打开idea找到database( view —> Tool Windows —> database),大家也可以定个快捷键,方便以后日常操作 就是这个样子,然后点加号 然后就可以编写执…

【C语言进阶(2)】数据存储练习题

文章目录 练习1练习2练习3练习4练习5练习6练习7 练习1 下面代码的结果为什么会是这样? 代码分析 char a -1; 11111111 11111111 11111111 11111111 //-1 的补码 - 因为 a 是 char 类型的变量,只能存储 8 个比特位,将 -1 补码的后 8 位截断…

Mac系统下使用远程桌面连接Windows系统

一、远程桌面工具 Microsoft Remote Desktop 二、下载地址 https://go.microsoft.com/fwlink/?linkid868963 三、下载并安装 四、添加远程PC PC name:云服务器IP。 User account: 添加系统用户 PC name:远程桌面 IP 地址User account:可以选择是…

SpringBoot实现数据库读写分离

SpringBoot实现数据库读写分离 参考博客https://blog.csdn.net/qq_31708899/article/details/121577253 实现原理:翻看AbstractRoutingDataSource源码我们可以看到其中的targetDataSource可以维护一组目标数据源(采用map数据结构),并且做了路由key与目标…

基于Go编写一个可视化Navicat本地密码解析器

前提 开发小组在测试环境基于docker构建和迁移一个MySQL8.x实例,过程中大意没有记录对应的用户密码,然后发现某开发同事本地Navicat记录了根用户,于是搜索是否能够反解析Navicat中的密码掩码(这里可以基本断定Navicat对密码是采用…