使用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.mzph.cn/news/23513.shtml

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

相关文章

Maven项目中Lifecycle和Plugins下的install的区别

在Maven中,如果你的web和service在不同的模块下,如果直接用用tomcat插件运行web层,那么运行时会报错 Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.5.2:install (default-cli) on project springboot: The pack…

常用SQL语句总结

SQL语句 文章目录 SQL语句1 SQL语句简介2 DQL(数据查询语句)3 DML(数据操纵语句)4 DDL(数据定义语句)5 DCL(数据控制语句)6 TCL(事务控制语句) 1 SQL语句简介…

nginx网站服务

nginx:是一个高性能,轻量级web软件 1、稳定性高(没有Aapache稳定) 2、资源消耗比较低,体现在处理http请求的并发能力很高,单台物理服务器可以处理到3万-5万个请求 稳定:一般在企业中为了保持…

SpringBoot+AOP+Redission实战分布式锁

文章目录 前言一、Redission是什么?二、使用场景三、代码实战1.项目结构2.类图3.maven依赖4.yml5.config6.annotation7.aop8.model9.service 四、单元测试总结 前言 在集群环境下非单体应用存在的问题:JVM锁只能控制本地资源的访问,无法控制…

javaAPI(二):String、StringBuffer、StringBuilder

String、StringBuffer、StringBuilder的异同? String:不可变字符序列;底层结构使用char[]存储; StringBuffer:可变字符序列;线程安全的,效率低;底层结构使用char[]存储; …

快速搭建单机RocketMQ服务(开发环境)

一、什么是RocketMQ ​ RocketMQ是阿里巴巴开源的一个消息中间件,在阿里内部历经了双十一等很多高并发场景的考验,能够处理亿万级别的消息。2016年开源后捐赠给Apache,现在是Apache的一个顶级项目。 早期阿里使用ActiveMQ&#xff0c…

ClickHouse(十一):Clickhouse MergeTree系列表引擎 - MergeTree(1)

进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注IT贫道,获取高质量博客内容! 🏡个人主页:含各种IT体系技术,IT贫道_Apache Doris,Kerberos安全认证,大数据OLAP体系技术栈-CSDN博客 &…

分治法、回溯法与动态规划

算法思想比较 回溯法:有“通用解题法”之称,用它可以系统地搜索问题的所有解。回溯法是按照深度优先搜索(DFS)的策略,从根结点出发深度探索解空间树分治法:将一个难以直接解决的大问题,分割成一些规模较小的相同问题&…

《Java-SE-第二十九章》之Synchronized原理与JUC常用类

前言 在你立足处深挖下去,就会有泉水涌出!别管蒙昧者们叫嚷:“下边永远是地狱!” 博客主页:KC老衲爱尼姑的博客主页 博主的github,平常所写代码皆在于此 共勉:talk is cheap, show me the code 作者是爪哇岛的新手,水平很有限&…

Java基础面试题3

Java基础面试题 1:https://cloud.fynote.com/share/d/qPGzAVr5 2:https://cloud.fynote.com/share/d/MPG9AVsAG 3:https://cloud.fynote.com/share/d/qPGHKVsM 一、JavaWeb专题 1.HTTP响应码有哪些 1、1xx(临时响应&#xf…

wonderful-sql 作业

Sql 作业 作业1: 答: create table Employee (Id integer not null, Name varchar(32) , Salary integer, departmentId integer, primary key (Id) );create table Department( Id integer primary key, Name varchar(30) not null );insert into emp…

Linux:在使用UEFI固件的计算机上内核是如何被启动的

前言 启动计算机通常不是一件难事:按下电源键,稍等片刻,你就能看到一个登录界面,再输入正确的密码,就可以开启一天的网上冲浪之旅了。 但偶尔这件事没那么顺利,有时候迎接你的不是熟悉的登录界面&#xf…

mysql8配置binlog日志skip-log-bin,开启、关闭binlog,清理binlog日志文件

1.概要说明 binlog 就是binary log,二进制日志文件,这个文件记录了MySQL所有的DML操作。通过binlog日志我们可以做数据恢复,增量备份,主主复制和主从复制等等。对于开发者可能对binlog并不怎么关注,但是对于运维或者架…

机器学习和深度学习简述

一、人工智能、机器学习、深度学习的关系 近些年人工智能、机器学习和深度学习的概念十分火热,但很多从业者却很难说清它们之间的关系,外行人更是雾里看花。概括来说,人工智能、机器学习和深度学习覆盖的技术范畴是逐层递减的,三…

Java Maven 构建项目里面有个聚合的概念

Java 项目里面有个聚合的概念,它没有.net里面解决方案(solution)的能力,可以统一的编译项目下的所有包,或设置统一的打包路径,使用maven编译后的产物也不会像.net那样编译到当前项目的bin文件夹下面,而是统一的生成到配…

无人驾驶实战-第五课(动态环境感知与3D检测算法)

激光雷达的分类: 机械式Lidar:TOF、N个独立激光单元、旋转产生360度视场 MEMS式Lidar:不旋转 激光雷达的输出是点云,点云数据特点: 简单:x y z i (i为信号强度) 稀疏:7%&…

WPF中自定义Loading图

纯前端方式&#xff0c;通过动画实现Loading样式&#xff0c;如图所示 <Grid Width"35" Height"35" HorizontalAlignment"Center" VerticalAlignment"Center" Name"Loading"><Grid.Resources><DrawingBrus…

【云原生】k8s组件架构介绍与K8s最新版部署

个人主页&#xff1a;征服bug-CSDN博客 kubernetes专栏&#xff1a;kubernetes_征服bug的博客-CSDN博客 目录 1 集群组件 1.1 控制平面组件&#xff08;Control Plane Components&#xff09; 1.2 Node 组件 1.3 插件 (Addons) 2 集群架构详细 3 集群搭建[重点] 3.1 mi…

从价值的角度看,为何 POSE 通证值得长期看好

PoseSwap 是 Nautilus Chain 上的首个 DEX&#xff0c;基于 Nautilus Chain 也让其成为了首个以模块化构建的 Layer3 架构的 DEX。该 DEX 本身能够以 Dapp 层&#xff08;Rollup&#xff09;的形态&#xff0c;与其他应用层并行化运行。

Linux之 Ubuntu 安装常见服务 (二) Tomcat

安装TomCat 服务 1、安装JDK环境 https://www.oracle.com/java/technologies/downloads/ 下载的官网 wget https://download.oracle.com/java/20/latest/jdk-20_linux-x64_bin.deb (sha256) 使用dpkg进行软件安装时&#xff0c;提示&#xff1a;dpkg&#xff1a;处理软件包XX…