JVM 监控工具之JProfiler

一、JProfiler介绍

JProfiler是一个专业的工具,用于分析运行中的JVM内部发生的事情。当您的生产系统出现问题时,您可以在开发、质量保证和消防任务中使用它。

JProfiler主要处理四个主题:

  • 方法调用

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

  • 分配

分析堆上对象的分配、引用链和垃圾收集属于“内存分析”类别。此功能使您能够修复内存泄漏,通常使用较少的内存,并分配较少的临时对象。

  • 线程和锁

线程可以持有锁,例如通过对对象进行同步。当多个线程协作时,可能会发生死锁,JProfiler可以为您可视化它们。此外,锁可以被争用,这意味着线程必须等待才能获取它们。JProfiler提供了对线程及其各种锁定情况的深入了解。

  • 更高级别的子系统
  1. 许多性能问题发生在更高的语义级别上。例如,对于JDBC调用,您可能想要找出哪条SQL语句是最慢的。对于这样的子系统,JProfiler提供了将特定有效载荷附加到调用树的“探测器”。
  2. JProfiler的UI是作为桌面应用程序提供的。您可以在不使用UI的情况下以交互方式评测实时JVM或自动评测。评测数据持久化在快照中,这些快照可以使用JProfiler UI打开。此外,命令行工具和构建工具集成可帮助您自动化分析会话。

特点:

  1. 使用方便、界面操作友好(简单且强大)
  2. 对被分析的应用影响小 (提供模板)
  3. CPu,Thread,Memory分析功能尤其强大
  4. 支持对jdbc,noSq1,jsp,servlet,socket等进行分析
  5. 支持多种模式(离线,在线)的分析
  6. 支持监控本地、远程的JVM
  7. 跨平台,拥有多种操作系统的安装版本

二、JProfiler 功能结构

结构全貌,包括:应用程序、JProfiler UI和所有命令行实用程序。

 

1、分析代理

  1. “JVM工具接口”(JVMTI)是一个本机接口,探查器使用它来访问信息并添加用于插入自己的检测的挂钩。这意味着分析代理的至少一部分必须实现为本机代码,因此JVM分析程序不是独立于平台的。JProfiler支持网站上列出的一系列平台。
  2. JVM探查器被实现为在启动时或稍后某个时候加载的本机库。要在启动时加载它,将在命令行中添加VM参数-agentpath:<path To native library>。您很少需要手动添加这个参数,因为JProfiler会为您添加它,例如在IDE集成、集成向导中,或者如果它直接启动JVM。然而,重要的是要知道,这就是启用概要分析的原因。
  3. 如果JVM成功地加载了本机库,它会调用库中的一个特殊函数,为评测代理提供初始化自己的机会。然后,JProfiler将打印两条以JProfiler>为前缀的诊断消息,这样您就知道评测是活动的。最重要的是,如果您传递-agentpath VM参数,则分析代理要么成功加载,要么JVM没有启动。
  4. 加载后,概要分析代理会要求JVMTI收到各种事件的通知,例如线程创建或类加载。其中一些事件直接传递分析数据。使用类加载事件,分析代理在加载类时插入类,并插入自己的字节码来执行测量。
  5. JProfiler可以通过使用JProfilerUI或使用bin/jpenable命令行工具。在这种情况下,可能需要重新转换大量已经加载的类,以便应用所需的工具。

2、记录数据

  1. JProfiler代理只收集分析数据。JProfiler UI是单独启动的,并通过套接字连接到分析代理。这意味着,无论评测JVM是在本地机器上还是在远程机器上运行,这实际上都无关紧要——评测代理和JProfiler UI之间的通信机制始终相同。
  2. 从JProfiler UI,您可以指示代理记录数据,在UI中显示分析数据,并将快照保存到磁盘。作为UI的替代方案,可以通过其MBean来控制概要分析代理。使用此MBean的命令行工具是bin/jpcontroller。
  3. 控制评测代理的另一种方式是使用一组预定义的触发器和操作。通过这种方式,分析代理可以在无人参与模式下运行。这在JProfiler中被称为“离线评测”,对于自动化评测会话非常有用。

3、快照

  1. 虽然JProfiler UI可以显示实时评测数据,但通常需要保存所有记录的评测数据的快照。快照可以手动保存在JProfiler UI中,也可以通过触发操作自动保存。
  2. 快照可以在JProfiler UI中打开和比较。对于自动化处理,命令行工具bin/jpexport和bin/jpcompare可以用于从以前保存的快照中提取数据并创建HTML报告。
  3. 从运行中的JVM获取堆快照的一种低开销方法是使用bin/jpdump命令行工具。它使用JVM的内置功能来保存HPROF快照,该快照可以由JProfiler打开,并且不需要加载评测代理。

三、安装JProfiler 

1、下载

包含Windows和Linux/Unix提供了可执行安装程序:

https://www.ej-technologies.com/download/jprofiler/files

注:GUI与代理端版本要一致

2、windows安装和激活

1.首页默认,直点击下一步

2.同意授权

3.进入注册页面

4.在注册页面输入用户和密钥

5.打开注册机,点击generate生成账号和密钥

6.把license key输入到步骤一中的密钥框,公司名字可以顺便写

7.直接点击下一步,完成安装

3、Linux安装

1.在线下载

wget https://download-gcdn.ej-technologies.com/jprofiler/jprofiler_linux_11_0_2.rpm

2.在线安装

默认安装路径:/opt/jprofiler11

rpm -ivp jprofiler_linux_11_0_2.rpm

3.添加配置

cd /usr/src/tomcat-pinter

vi catalina.sh

在opt里面添加:-agentpath:/opt/jprofiler11/bin/linux-x64/libjprofilerti.so=port=8849,nowait

4.重启tomcat服务,检查是否监听成功

Netstat -anp | grep 8849

三.Windows连接jprofiler

1.点击start center-new session-new remote intergration

2.选择on a remote computer –linux x86

3.选择oracle 1.8

4.选择默认,下一步

5.输入被监控的应用服务器ip

6.选择linux中jprofiler安装路径:/opt/jprofiler11

7.默认配置,点击下一步

8. 默认配置,点击下一步

9.点击finish

10.选择推荐模式

11.点击ok

12.有数据表示配置成功

四、分析总结

1、内存分析

分析: 内存中的对象的情况

  1. 频繁创建的Java对象: 死循环、循环次数过多
  2. 存在大的对象:读取文件时,byte]应该边读边写。-->如果长时间不写出的话,导致byte[]过 
  3. 存在内存泄漏

2、线程分析

线程分析主要关心三个方面:

  1. web容器的线程最大数。比如: Tomcat的线程容量应该略大于最大并发数。
  2. 线程阻塞
  3. 线程死锁

五、总结

  1. JProfiler有两个部分:一方面是桌面UI和操作快照的命令行实用程序,另一方面是评测代理和控制评测JVM的命令行应用程序。您从网站下载的安装程序和档案包含这两部分。

  2. 但是,对于远程评测,您只需要在远程端安装评测代理。虽然您可以在远程机器上使用JProfiler分发版简单地提取存档,但您可能希望限制所需文件的数量,尤其是在自动化部署时。此外,评测代理是可自由重新分发的,因此您可以将其与应用程序一起发货,也可以将其安装在客户机器上进行故障排除。

  3. 要获得带有评测代理的最小软件包,远程集成向导会向您显示相应代理存档的下载链接,以及包含所有受支持平台的代理存档文件的下载页面。在JProfiler GUI中,调用会话->集成向导->新建服务器/远程集成,选择“远程”选项,然后继续执行远程安装目录步骤。

 

posted on 2023-11-02 11:15  uestc2007  阅读(195)  评论(0编辑  收藏  举报

导航