JVM分析工具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安装的子集。

 

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

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

相关文章

【项目 线程3】3.8 线程同步 3.9互斥锁 3.10死锁 3.11读写锁

文章目录 3.8 线程同步3.9互斥锁互斥量互斥量相关操作函数 3.10死锁3.11读写锁读写锁读写锁相关操作函数 3.8 线程同步 问题&#xff1a;卖第0张、第-1张门票&#xff0c;三个线程买同一张门票等等。 原因&#xff1a;三个线程并发执行去抢占线程资源&#xff0c;A进来休眠600…

【JavaEE初阶】了解JVM

文章目录 一. JVM内存区域划分二. JVM类加载机制2.1 类加载整体流程2.2 类加载的时机2.3 双亲委派模型(经典) 三. JVM垃圾回收机制(GC)3.1 GC实际工作过程3.1.1 找到垃圾/判定垃圾1. 引用计数(不是java的做法,Python/PHP)2. 可达性分析(Java的做法) 3.1.2 清理垃圾1. 标记清除2…

数据结构——单链表OJ题

单链表OJ题 前言一、删除链表中等于给定值 val 的所有节点二、反转一个单链表三、返回链表的中间结点四、输出该链表中倒数第k个结点五、将两个有序链表合并六、链表的回文结构七、将链表分割成两部分八、找出第一个公共结点九、判断链表中是否有环总结 前言 在前面的博客中我…

jenkins的cicd操作

cicd概念 持续集成&#xff08; Continuous Integration&#xff09; 持续频繁的&#xff08;每天多次&#xff09;将本地代码“集成”到主干分支&#xff0c;并保证主干分支可用 持续交付&#xff08;Continuous Delivery&#xff09; 是持续集成的下一步&#xff0c;持续…

智能优化算法——哈里鹰算法(Matlab实现)

目录 1 算法简介 2 算法数学模型 2.1.全局探索阶段 2.2 过渡阶段 2.3.局部开采阶段 3 求解步骤与程序框图 3.1 步骤 3.2 程序框图 4 matlab代码及结果 4.1 代码 4.2 结果 1 算法简介 哈里斯鹰算法(Harris Hawks Optimization&#xff0c;HHO)&#xff0c;是由Ali As…

高并发与性能优化的神奇之旅

作为公司的架构师或者程序员&#xff0c;你是否曾经为公司的系统在面对高并发和性能瓶颈时感到手足无措或者焦头烂额呢&#xff1f;笔者在出道那会为此是吃尽了苦头的&#xff0c;不过也得感谢这段苦&#xff0c;让笔者从头到尾去探索&#xff0c;找寻解决之法。 目录 第一站…

android AIDL 学习使用

在android studio 2023.2中使用 1、在buidl.gradle增加以下配置&#xff0c;然后同步。不增加这些配置&#xff0c;创建aidl时显示为灰色&#xff0c;不能创建 buildFeatures {compose true// Disable unused AGP featuresbuildConfig falseaidl truerenderScript falseresVal…

Flink学习教程

最近因为用到了Flink&#xff0c;所以博主开了《Flink教程》专栏来记录Flink的学习笔记。 【Apache Flink v1.16 中文文档】 【官网 - Apache Flink v1.3 中文文档】 一、基础 参考链接如下&#xff1a; Flink教程&#xff08;01&#xff09;- Flink知识图谱Flink教程&…

使用即时消息缩短 B2B 销售周期

在B2B销售中&#xff0c;时间就是一切。所以企业需要做的就是尽可能快地回复客户的咨询&#xff0c;否则会造成严重的客户流失。什么是 B2B 销售&#xff1f;它就是企业对企业销售&#xff0c;企业主要或仅向其他企业销售其产品或服务&#xff0c;这些产品或服务可以是从软件到…

安卓:BottomNavigationBar——底部导航栏控件

目录 一、BottomNavigationBar介绍 二、BottomNavigationBar的常用方法及其常用类 &#xff08;一&#xff09;、常用方法 1. 添加菜单项 2. 移除菜单项 3. 设置选中监听器 4. 设置当前选中项 5. 设置徽章 6. 样式和颜色定制 7. 动画效果 8. 隐藏底部导航栏。 9、设…

C# Blazor 学习笔记(10):依赖注入

文章目录 前言Blazor 依赖注入依赖注入用于解决什么问题&#xff1f;依赖注入的生命周期。测试代码 总结补充日期2023年8月4日 前言 Blazor 具有前后端不分离模式&#xff0c;但是如何直接调用需要一定的设置 Blazor 依赖注入 依赖注入在spring里面很常见&#xff0c;毕竟.N…

Maven里面没有plugins dependence问题解决

说明&#xff1a;今天在做Nacos、Dubbo整合的时候&#xff0c;在父模块中做了版本限制&#xff0c;出错后就又把版本控制什么都删掉&#xff0c;回退到最开始的状态&#xff0c;此时父模块下面的服务右侧的 maven里面没有plugins dependence &#xff0c;然后项目全都报错。 问…

react18 之 06 之 useReducer 结合 useContext使用 (实现全局状态管理、复杂组件交互逻辑、多个组件需要共享和更新某个状态)

目录 react18 之 06 之 useReducer 结合 useContext使用 (实现全局状态管理、复杂组件交互逻辑、多个组件需要共享和更新某个状态)useReducer 结合 useContext使用 实现全局共享RootCom.jsxA.jsxASon.jsxB.jsxC.jsx执行效果 react18 之 06 之 useReducer 结合 useContext使用 (…

JavaWeb三大组件 —— Servlet

目录 servlet 注册servlet 父pom pom文件 1、通过注解注册 2、使用ServletRegistrationBean注册 API三生三世 第一生Servlet 第二生SpringMVC 今生SpringBoot servlet Servlet的作用&#xff1a; 接受请求参数、处理请求&#xff0c;响应结果&#xff0c;&#xff08;就…

小白解密ChatGPT大模型训练;Meta开源生成式AI工具AudioCraft

&#x1f989; AI新闻 &#x1f680; Meta开源生成式AI工具AudioCraft&#xff0c;帮助用户创作音乐和音频 摘要&#xff1a;美国公司Meta开源了一款名为AudioCraft的生成式AI工具&#xff0c;可以通过文本提示生成音乐和音频。该工具包含三个核心组件&#xff1a;MusicGen用…

Docker 容器转为镜像

# 容器转成镜像并指定镜像名称与版本号 # commit 时原有容器挂载的目录是不会被写入到新的镜像中去的&#xff0c;数据卷相关的都不会生效 # 但是 root 目录下新建的内容会写入到新的镜像中去 $ docker commit 容器ID 新镜像名称:版本号 $ docker commit -m"描述信息"…

瑞芯微RK3568开发板保姆级护航入门学习嵌入式

资料优势 专为3568编写|迅为原创|拒绝网络拼凑 20个手册2800页手册进行结构分层适用于学习与开发 为了方便大家清晰快速的学习&#xff0c;迅为iTOP-3568开发板手册资料全面升级&#xff0c;对手册内容进行了结构分层&#xff0c;共计20个文档&#xff0c;超2800页的资料专为…

AI写作宝有哪些,分享两种AI写作工具

AI写作宝是一种基于人工智能技术的写作辅助工具。它可以根据用户输入的关键词和主题快速生成文章。AI写作宝可以为用户节省大量的时间和精力&#xff0c;帮助用户快速生成高质量的文章。今天就为大家推荐两款AI写作宝&#xff1a; 一、AI创作家 AI创作家是一款基于人工智能技…

企业如何搭建矩阵内容,才能真正实现目的?

当下&#xff0c;新媒体矩阵营销已成为众多企业的营销选择之一&#xff0c;各企业可以通过新媒体矩阵实现扩大品牌声量、维持用户关系、提高销售业绩等不同的目的。 而不同目的的矩阵&#xff0c;它的内容运营模式会稍有差别&#xff0c;评价体系也会大不相同。 企业在运营某类…

Jenkins工具系列 —— 插件 实现用户权限分配与管理

文章目录 安装插件 Role-based Authorization Strategy添加用户注册配置权限查看当前使用者&#xff0c;获取user id配置管理员权限配置普通用户权限&#xff08;非管理员权限&#xff09; 小知识 安装插件 Role-based Authorization Strategy 点击 左侧的 Manage Jenkins —&…