当前位置: 首页 > news >正文

使用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登录用户进行下载。对于完整的分析会话,不存在这样的限制。

 

相关文章:

使用JProfiler进入JVM分析

要评测JVM,必须将JProfiler的评测代理加载到JVM中。这可以通过两种不同的方式发生:在启动脚本中指定-agentpath VM参数,或者使用attach API将代理加载到已经运行的JVM中。 JProfiler支持这两种模式。添加VM参数是评测的首选方式,集…...

高级web前端开发工程师的职责说明(合集)

高级web前端开发工程师的职责说明1 职责: 1、根据需求文档,完成PC端、移动端页面及交互的开发,并保证兼容性和确保产品具有优质的用户体验; 2、熟练使用 HTML 、 CSS 、 JS 、 Ajax 等技术,能解决各种浏览器兼容性问题&#xff…...

powerdesigner各种字体设置;preview字体设置;sql字体设置

1.设置左侧菜单: 步骤如下: tools —> general options —> fonts —> defalut UI font ,选择字体样式及大小即可,同下图。 2.设置preview字体大小(sql预览) 步骤如下: tools —> general o…...

MyBatis查询数据库(4)

前言🍭 ❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 终于到了MyBatis最后一篇,这篇讲的是动态SQL的使用。 复杂情…...

Python3 处理PDF之PyMuPDF 入门

PyMuPDF 简介 PyMuPDF是一个用于处理PDF文件的Python库,它提供了丰富的功能来操作、分析和转换PDF文档。这个库的设计目标是提供一个简单易用的API,使得开发者能够轻松地在Python程序中实现PDF文件的各种操作。 PyMuPDF的主要特点如下: 跨平台兼容性&a…...

使用隧道HTTP时如何解决网站验证码的问题?

使用代理时,有时候会遇到网站验证码的问题。验证码是为了防止机器人访问或恶意行为而设置的一种验证机制。当使用代理时,由于请求的源IP地址被更改,可能会触发网站的验证码机制。以下是解决网站验证码问题的几种方法: 1. 使用高匿…...

Java超级玛丽小游戏制作过程讲解 第三天 创建并完成常量类02

public class StaticValue {//背景public static BufferedImage bgnull;public static BufferedImage bg2null;//马里奥向左跳跃public static BufferedImage jump_Lnull;//马里奥向右跳跃public static BufferedImage jump_Rnull;//马里奥向左站立public static BufferedImage…...

ARM微架构

一、流水线 二、指令流水线 指令流水线 指令流水线 指令流水线 ARM指令流水线 ARM7采用3级流水线 ARM9采用5级流水线 Cortex-A9采用8级流水线 注1:虽然流水线级数越来越多,但都是在三级流水线的基础上进行了细分 PC的作用(取指) …...

Stable Diffusion AI绘画学习指南【本地环境搭建win+mac】

一、硬件配配置要求 系统:windows 10 / Mac os 硬盘:C 盘预留 15GB 以上,其他盘 50GB 以上,Stable Ddiffusion的很多大模型都是以 GB 起步。 显卡:4GB 以上,建议 8GB, 效率高,能玩大尺寸的图 CPU&…...

Unity 3D ScrollRect和ScrollView回弹问题的解决

你是否是这样&#xff1f; Content高度 < 全部Cell加在一起的总高 他就认为你的全部Cell加起来就跟Content一样大&#xff0c;所以才出现了这种完全回弹 我该怎么办&#xff1f; 很简单&#xff0c;改变Content的长度跟所有Cell的和一样大 void RefreshSize(){float allD…...

python编写小程序有界面,python编写小程序的运行

大家好&#xff0c;小编为大家解答python编写小程序怎么看代码的的问题。很多人还不知道python编写小程序的运行&#xff0c;现在让我们一起来看看吧&#xff01; Python第一个简单的小游戏 temp input("请猜一猜姐姐的幸运数字是&#xff1a; ") guess int(temp) …...

【中断机制】什么是中断?使用中断的原因、注意事项

目录 一、为什么需要中断 二、什么是中断 1、中断的概念 2、中断的分类 3、中断的处理流程 三、中断处理程序要少用延时的原因 一、为什么需要中断 以网卡为例&#xff0c;CPU 如果要从网卡获取数据&#xff0c;不可能时时盯着网卡啥时候会有数据。当网卡收到数据时&…...

C++20 协程(coroutine)入门

文章目录 C20 协程&#xff08;coroutine&#xff09;入门什么是协程无栈协程和有栈协程有栈协程的例子例 1例 2 对称协程与非对称协程无栈协程的模型无栈协程的调度器朴素的单线程调度器让协程学会等待Python 中的异步函数可等待对象M:N 调度器——C# 中的异步函数 小结 C20 中…...

2023.8.6

2022河南萌新联赛第&#xff08;三&#xff09;场&#xff1a;河南大学\区间操作.cpp //题意&#xff1a;定义一个f[x]函数表示一个数分解质因数后各个质因子的幂次和&#xff0c;给定一个长度为n的数组&#xff0c; //有m个操作&#xff0c;第一种操作是输出[l, r]范围内的a…...

kubernetes网络之网络策略-----Network Policies - Default

默认情况下&#xff0c;如果名称空间中没有配置 NetworkPolicy&#xff0c;则该名称空间中&#xff0c;所有Pod的所有入方向流量和所有出方向流量都是被允许的。 那么如果我们想改变名称空间中默认的网络策略&#xff0c;又该怎么做呢&#xff1f; 默认拒绝所有的入方向流量 …...

奥威BI系统|秒分析,更适合分析大数据

根据以往的经验&#xff0c;当数据量多到一定程度就容易导致系统卡顿、崩溃。这种现象给企业级数据分析造成了极大的困扰。随着业务发展扩大和分析需求精细化&#xff0c;企业需要一套能秒分析大数据的系统。而奥威BI系统就是这样一款可以秒分析大数据的商业智能系统。 奥威BI…...

安全作业-Race竞争型漏洞、原型链污染

1.race漏洞一直卡在虚拟机安装上(待研究) 2.原型链污染 一、第一题js代码 const express require(express) var hbs require(hbs); var bodyParser require(body-parser); const md5 require(md5); var morganBody require(morgan-body); const app express(); var use…...

对微服务网关的一些总结

对微服务网关的一些总结 一. 什么是网关 网关是位于NGINX(或没有)与真实微服务间的转发服务。 用户通过HTTP接口&#xff0c;连接到NGINX&#xff0c;然后NGINX反向到M个网关。 网关根据[服务注册与发现],进行转发请求到具体的微服务上。 由于网关可编码&#…...

该选择WPF 还是 Winform?

WPF和WinForms都是.NET平台下的桌面应用程序开发框架&#xff0c;它们各有特点&#xff0c;适用于不同的场景和需求。下面是对WPF和WinForms的一些比较和优劣势&#xff1a;WPF&#xff08;Windows Presentation Foundation&#xff09;&#xff1a;WPF具有强大的图形渲染能力&…...

概念解析 | ChatGPT技术概览

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:ChatGPT技术概览 参考资料:Deng J, Lin Y. The benefits and challenges of ChatGPT: An overview[J]. Frontiers in Computing and Intelligent Systems, 2022, 2(2): 81-83. …...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...