JVM 监控工具之JProfiler
一、JProfiler介绍
JProfiler是一个专业的工具,用于分析运行中的JVM内部发生的事情。当您的生产系统出现问题时,您可以在开发、质量保证和消防任务中使用它。
JProfiler主要处理四个主题:
- 方法调用
这通常被称为“CPU评测”。方法调用可以通过不同的方式进行测量和可视化。方法调用的分析可以帮助您了解应用程序正在做什么,并找到提高其性能的方法。
- 分配
分析堆上对象的分配、引用链和垃圾收集属于“内存分析”类别。此功能使您能够修复内存泄漏,通常使用较少的内存,并分配较少的临时对象。
- 线程和锁
线程可以持有锁,例如通过对对象进行同步。当多个线程协作时,可能会发生死锁,JProfiler可以为您可视化它们。此外,锁可以被争用,这意味着线程必须等待才能获取它们。JProfiler提供了对线程及其各种锁定情况的深入了解。
- 更高级别的子系统
- 许多性能问题发生在更高的语义级别上。例如,对于JDBC调用,您可能想要找出哪条SQL语句是最慢的。对于这样的子系统,JProfiler提供了将特定有效载荷附加到调用树的“探测器”。
- JProfiler的UI是作为桌面应用程序提供的。您可以在不使用UI的情况下以交互方式评测实时JVM或自动评测。评测数据持久化在快照中,这些快照可以使用JProfiler UI打开。此外,命令行工具和构建工具集成可帮助您自动化分析会话。
特点:
- 使用方便、界面操作友好(简单且强大)
- 对被分析的应用影响小 (提供模板)
- CPu,Thread,Memory分析功能尤其强大
- 支持对jdbc,noSq1,jsp,servlet,socket等进行分析
- 支持多种模式(离线,在线)的分析
- 支持监控本地、远程的JVM
- 跨平台,拥有多种操作系统的安装版本
二、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打开,并且不需要加载评测代理。
三、安装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、内存分析
分析: 内存中的对象的情况
- 频繁创建的Java对象: 死循环、循环次数过多
- 存在大的对象:读取文件时,byte]应该边读边写。-->如果长时间不写出的话,导致byte[]过
- 存在内存泄漏
2、线程分析
线程分析主要关心三个方面:
- web容器的线程最大数。比如: Tomcat的线程容量应该略大于最大并发数。
- 线程阻塞
- 线程死锁
五、总结
-
JProfiler有两个部分:一方面是桌面UI和操作快照的命令行实用程序,另一方面是评测代理和控制评测JVM的命令行应用程序。您从网站下载的安装程序和档案包含这两部分。
-
但是,对于远程评测,您只需要在远程端安装评测代理。虽然您可以在远程机器上使用JProfiler分发版简单地提取存档,但您可能希望限制所需文件的数量,尤其是在自动化部署时。此外,评测代理是可自由重新分发的,因此您可以将其与应用程序一起发货,也可以将其安装在客户机器上进行故障排除。
-
要获得带有评测代理的最小软件包,远程集成向导会向您显示相应代理存档的下载链接,以及包含所有受支持平台的代理存档文件的下载页面。在JProfiler GUI中,调用会话->集成向导->新建服务器/远程集成,选择“远程”选项,然后继续执行远程安装目录步骤。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性