JProfiler的安装与使用

JProfiler的安装与使用

JProfiler是由ej-technologies GmbH公司开发的一个用于分析JVM内部情况的专业工具。在研发过程中可以使用JProfiler,用于质量保证,也可以用于解决生产系统遇到的问题。

JProfiler处理的主要问题

Method calls(方法调用)

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

Allocations(分配)

分析对象在堆上的分配、引用链、垃圾回收(属于"内存分析")。这个功能可以让你解决内存泄漏, 用更少的内存分配更少的临时对象。

Threads and locks(线程和锁)

线程可以持有锁,比如在一个对象做同步操作,当多个线程同时操作,可能出现死锁的情况,JProfiler可以可视化这种情况,更深入了解线程与各种锁的情况。

Higher level subsystems(高层子系统)

很多性能问题发生在更高的语义层面,比如JDBC调用过程中,想要找出哪条SQL语句耗时最长,对于此种子系统,JProfiler提供了“探针”。

JProfiler的架构

The profiling agent(分析代理)

"JVM工具接口"(JVMTI)是一个本地接口,分析器使用此接口来获取信息。这意味着部分分析代理必须使用本地代码实现,故JVM profiler(JProfiler)不是独立于平台的,JProfiler支持了一系列平台。
JVM profiler作为一个本地库实现,它可以在启动时或者稍后的时间点加载。如果在启动时加载则需要在命令行中添加一个VM参数 "-agentpath:本地库的路径"。一般你不用手动配置这个参数,因为JProfiler会自动添加。
当JVM成功加载了本地库(JVM profiler),它就会调用库中的一个特殊函数,让the profiling agent(分析代理)初始化自己,,之后JProfiler会打印以“JProfiler”为前缀的信息,证明分析代理已经完成初始化。当添加了“-agentpath” VM参数后,只有the profiling agent(分析代理)成功加载或JVM启动失败两种可能。
当the profiling agent(分析代理)加载后,会要求JVMTI通知各种事件,如线程创建或类加载。
JProfiler可以将代理加载到已经运行的JVM中,通过JProfiler UI或者“../jpenable”命令行工具(command line tool)。

Recording data(数据记录)

JProfiler agent(JVM分析代理) 只负责收集分析数据。JProfiler UI是单独启动,通过Socket连接到JProfiler agent(JVM分析代理)。因此Profiled JVM(被分析的JVM)可以在本地机器或者远程机器上运行。
通过JProfiler UI,可以通知代理Recording data(记录数据),在UI中显示分析数据,并将快照保存到磁盘。作为UI的替代方案,也可以通过“../jpcontroller”命令行工具(command line tool)使用JProfiler MBEAN来控制分析代理
也可以使用一组预定义的触发器和操作来控制分析代理,此种方式在JProfiler称为"离线分析"。

Snapshots(快照)

虽然JProfiler UI可以显示实时分析数据,但保存记录所有分析数据的快照还是很有必要的。快照可以在JProfiler UI中手动保存,也可以通过触发器操作自动保存。
快照可以在JProfiler UI中打开和比较。对于自动化处理,命令行工具(command line tool)"../jpexport"和“../jpcompare”可以用来从先前保存的快照中提前数据并创建HTML报告。
从正在运行的JVM中获取堆快照的一种低开销(low-overhead)方式是使用"../jpdump"命令行工具(command line tool)。它使用JVM的内置功能来保存HPROF快照。此种快照可以被JProfiler打开,并且不需要加载分析代理。

JProfiler的下载与安装

下载

官方下载网址:https://www.ej-technologies.com/download/jprofiler/files

下载的版本:

windows系统:jprofiler_windows-x64_11_1_4.exe

linux系统:jprofiler_linux_11_1_4.tar.gz

安装

windows系统下载的是可执行程序,直接执行,自定义安装路径即可(如果不打算升级可以把升级检查频次设置为nerver)

linux系统下载的是tar包,通过tar命令解压后得到jprofiler11.1.4文件夹,移动到指定路径下即可
解压命令:tar -zxvf jprofiler_linux_11_1_4.tar.gz

如果想使用JProfiler的全部功能,需要购买许可证密钥来激活
name和company可以随意写
License key: L-J11-Everyone#202256-3huvfyy3ydckrg#2948

如果上面的许可证密钥失效了可以参考这个网址:
http://www.3h3.com/soft/248090.html

安装完毕后,
windows系统下运行jprofiler11\bin路径下的jprofiler.exe
linux系统下运行jprofiler11.1.4/bin路径下的jprofiler

注:
其他版本的激活码,可以看这位大佬的博客:https://zhile.io/2022/02/22/jprofiler-license.html
V13和V14版本亲测有效

安装完毕后启动JProfiler后如下图所示:

使用JProfiler分析JVM

分析JVM需要将JProfiler的分析代理加载到JVM中,有两种方式实现

  • 在启动脚本中指定一个"-agentpath"VM参数
  • 通过Attach API将代理加载到运行的JVM中

-agentpath VM参数

"-agentpath"是JVM提供的一个通过JVM参数,用于加载任何一种使用JVMTI接口的本地库。
在“ageentpath:”后面附加本地库的完整路径名。
eg:
-agentpath:/opt/jprofiler11.1.4/bin/linux-x64/libjprofilerti.so=port=8849,nowait

第一个等号将路径名与参数分开,第二个等号是参数"port=8849"的一部分。"port=8849"参数定义了分析代理与JProfiler UI连接的端口,默认端口为8849
"nowait"参数是告诉分析代理不要在启动时为了等待JProfiler UI连接而阻塞JVM,默认是启动时阻塞

指定"-agentpath"VM参数监控IDEA启动服务的JVM

1.选择一个新的服务集成

2.应用服务选择-通过应用服务

3.选择被监控的应用在本地

4.选择JVM环境-(我本地的环境是oracle-java1.8版本的java虚拟机hotspot)

5.选择应用服务是否等待JProfiler UI的连接(我这里选择的是直接启动,不等待JProfiler UI的连接)

6.选择JProfiler UI连接被分析的JVM的端口号(我这里选择的是默认的8849端口号)

7.安装VM参数启动服务

启动后可以看到JProfiler前缀的日志,说明分析代理完成了初始化

8.选择立即开启会话,并选择开销低的全抽样形式来记录数据

9.完成配置,显示JVM状态

通过Attach API将代理加载到运行的JVM,远程监控linux系统中的JVM

1.将JProfiler的tar包上传到服务器中,并解压得到JProfiler文件夹

2.进入jprofiler11.1.4/bin路径下运行jpenable,选择要监控的JVM与监听端口号

3.选择一个新的远程集成

4.选择远程服务器的系统

5.选择JVM环境

6.选择应用服务是否等待JProfiler UI

7.选择远程连接的IP

8.选择远程分析代理的路径

9.选择在合适进行配置(我这里选择的是在JProfiler UI连接后进行配置)

10.选择远程监控的端口号

11.选择立即开启会话,并选择开销低的全抽样形式来记录数据

12.完成配置,显示JVM状态

JProfiler UI一直显示连接中,可以检查一下防火墙状态是否为开启状态,如果是开启需要关闭
检查防火墙状态:systemctl status firewalld
关闭防火墙:systemctl stop firewalld


参考网址

https://www.ej-technologies.com/resources/jprofiler/help/doc/main/introduction.html
https://www.ej-technologies.com/resources/jprofiler/v/13.0/help_zh_CN/doc/main/introduction.html

posted @ 2023-07-28 20:05  柯南。道尔  阅读(3439)  评论(0编辑  收藏  举报