功能强大、多合一,Java性能调优VisualVM多合一工具

jvisualvm工具使用 jvisualvm是JDK自带的具有图形界面操作功能的JVM性能监控和诊断工具,它不仅能分析和诊断堆转储文件,在线实时监控本地JVM进程,还能监控远程服务器上的JVM进程。 阅读详情

VisualVM多合一工具

VisualVM是一个功能强大的多合一故障诊断和性能监控的可视化工具。它集成了多种性能统计工具的功能,使用VisualVM可以代替jstat、jmap、jhat、jstack甚至是JConsole。在JDK6update7以后,VisualVM便作为JDK的一部分被发布出来,它完全免费。

VisualVM也可以作为独立的软件进行安装,读者可以在http://visualvm.java.net上下载并安装VisualVM的最新版本。

在本节的介绍中,笔者所使用的VisualVM事先安装了一些必要的插件,为了保持功能上的一致,读者也可以安装图6.34所示的插件。

​

VisualVM插件的安装非常容易。既可以通过离线下载插件文件*.nbm,然后在Plugin对话框的Downloaded选项卡中,添加已下载的插件,如图6.35所示;也可以在AvailablePlugin选项卡中在线安装插件。

​

一,VisualVM连接应用程序

VisualVM支持多种方式连接应用程序,最常用的就是本地连接。只要本地计算机内有Java应用程序正在执行,在VisualVM的Local节点下就会出现这些应用。

双击应用或者右击应用,选择Open命令,就能够监控应用程序的运行情况,如图6.36所示。由于VisualVM本身也是Java应用程序,因此其自身也在列表内。

除了本地连接外,VisualVM也支持远程JMX连接。Java应用程序可以通过以下参数打开JMX端口:

​

可以选择如图6.37所示的命令来添加JMX连接。

然后在弹出的对话框中输入远程计算机地址、端口,如图6.38所示。如果需要验证,则再输入用户名和密码。

添加成功后,在Local节点下就会出现一个带有JMX图标的应用程序,如图6.39所示。图中的两个应用程序分别通过本地方式与JMX方式进行连接,两者的标识图标是不同的。

​

​

​

​

VisualVM还支持添加远程主机。远程主机可以通过jstatd工具建立,如使用以下命令开启jstatd服务器:

​

接着在VisualVM中添加远程主机,如图6.40所示。然后在Hostname(主机名)文本框中输入正确的计算机名称或者IP地址。连接成功后,在Remote节点下即可显示远程计算机上的Java应用程序,如图6.41所示。

​

​

二,监控应用程序概况

通过VisualVM,可以查看应用程序的基本情况,例如进程ID、MainClass、启动参数等,如图6.42所示。

​

单击Tab页面上的Monitor页面(图中未显示),即可监控应用程序CPU、堆、永久区、类加载和线程数的总体情况,如图6.43所示。通过单击页面上的PerformGC和HeapDump按钮,还可以手工执行FullGC操作和生成堆快照。

​

注意:VisualVM将CPU使用率、堆信息、永久区信息、线程及类加载情况作了图形化的展示,方便开发人员查看。

三,ThreadDump和分析

VisualVM的Thread页面(如图6.44所示)可以提供详细的线程信息。单击ThreadDump按钮可以导出当前所有线程的堆栈信息。在左下角的Threadsinspector区域,选中相应的线程也可以只导出选中线程的堆栈信息。

​

注意:VisualVM的Thread页面提供了详细的线程信息。该页面还会进行自动死锁监测,一旦发现存在死锁现象,便会提示用户。

四,性能分析

VisualVM有两个采样器。在Sampler页面下显示了CPU和内存两个性能采样器,用于实时地监控程序信息。CPU采样器可以将CPU占用时间定位到方法,内存采样器可以查看当前程序的堆信息。

下例是一个模拟函数频繁调用的Java程序。getNameById()为底层函数,被getNames-ByIds()和getNamesByIdsBad()函数频繁调用。

​

​

通过VisualVM的采样功能,可以找到该程序中占用CPU时间最长的函数,如图6.46所示。可以看到getNameById()函数占用了大量的CPU时间。

注意:VisualVM虽然可以统计函数调用的时间,但是无法给出函数调用堆栈。因此,通过VisualVM还是无法确定一个函数被谁调用了多少次。

在VisualVM的默认统计信息中,并不包含JDK的内置对象的函数调用统计,例如java.*包中的类。如果需要统计JDK内的函数调用情况,需要选中右上角的Settings复选框手工进行配置。图6.47增加了对java.lang.String的函数调用统计信息。

​

通过内存采样器,可以实时查看系统中实例的分布情况,如图6.48所示。随着程序的运行,VisualVM会实时更新这些数据,动态显示各个类所占用的内存大小。

​

五,快照

VisualVM可以保存某一个时刻应用程序的瞬时运行情况,包括程序的堆信息、线程堆栈等。通过图6.49所示的操作,可以保存当前应用程序的整体快照信息。保存后的快照可以另存为文件,以供日后分析使用,如图6.50所示。

​

六,内存快照分析

通过右击图6.51中选中的项,在弹出的快捷菜单中选择HeapDump命令,可以立即获得当前应用程序的内存快照。

​

内存快照分析功能如图6.52所示,在顶部的Tab页中提供了4个基本功能页:Summary、Classes、Instances和OQLConsole(OQL控制台)。下面分别介绍它们。

(1)Summary页面展示当前内存的整体信息,包括内存大小、实例总数、类总数等。

(2)在Classes页面中,以类为索引,显示每个类的实例数占用空间。在Classes页面中还可以对两个不同的内存快照文件进行比较,这个功能可以帮助开发者快速分析同一应用程序在运行的不同时刻,内存数据产生的变化,如图6.52所示。

在Classes页面中,如果需要获取指定类的更多信息,可以右击该类,选择showinInstancesView命令进入该类的实例页面,如图6.53所示。

(3)Instances页面将显示指定类的所有实例。开发者可以查看当前内存中内存数据的实际内容。图6.54所示为查看String对象实例页面的部分内容。可以看到,系统中所有的String对象都被一一罗列出来,并且可以看到所有对象的具体数据。

​

​

在右下角的References页面可以查看系统中引用这个实例的对象,展示对象间的引用关系。

​

(4)OQL控制台(OQLConsole)提供了更为强大的对象查询功能。有关VisualVM的OQL支持,将在后续章节进行详细阐述。

注意:通过VisualVM提供的内存快照分析工具,可以查看堆快照内的类信息和对象信息。

七,MBean管理功能

VisualVM可以通过插件集成JConsole的MBean管理功能,图6.55所示为在VisualVM中使用MBean管理功能。

注意:VisualVM的MBean管理功能和JConsole是完全一致的。

八,TDA的使用

TDA是ThreadDumpAnalyzer的缩写,是一款线程快照分析工具。当使用jstack或者VisualVM等工具取得线程快照文件后,通过文本编辑器查看和分析线程快照文件是一件非常艰难的事情。而TDA的功能就在

于帮助开发者分析导出的线程快照。TDA可以在 http://java.net/projects/tda/上下载。

TDA可以作为一款单独的软件运行,也可以作为VisualVM的插件运行。当作为单独的软件运行时,只需要使用TDA打开线程快照文件即可。当作为VisualVM插件运行时,只要在VisualVM中导出当前线程快照,TDA就会自动启动并分析快照文件。TDA运行时的界面如图6.56所示。

由图6.56可以看到,TDA将文本信息进行了分析和整理,以树、表格的形式显示这些信息。通过TDA,可以方便地查看哪些线程持有哪些对象锁。通过Monitors节点,可以显示所有的锁信息,并查看持有该锁的线程。

注意:TDA实际上是一个文本分析工具,它将线程快照的文本信息经过整理和统计,以图形化的方式展现出来,方便开发人员进行数据分析。

九,BTrace简介

BTrace是一款非常有意思的工具,它可以在不停机的情况下,通过字节码注入,动态监控系统的运行情况。它可以跟踪指定的方法调用、构造函数调用和系统内存等信息。本节在参考BTrace用户手册的基础上,着眼于实际应用,选取较为实用的几个BTrace脚本,演示BTrace工具强大的功能。

在VisualVM中安装BTrace插件后,便可以针对Java应用程序执行BTrace脚本了。在Java应用程序的节点上右击,选择快捷菜单中的Traceapplication命令即可进入BTrace插件界面,如图6.57所示。

​图6.57选择Traceapplication命令

BTrace界面主要分为上下两部分,上半部分为代码区,下半部分为输出结果。在代码区中完成BTrace脚本的编写,单击Start按钮即可将BTrace脚本注入选中的应用程序中;程序输出结果将在下半部分显示,如图6.58所示。

​

本节使用的目标测试程序如下,该程序周期性地进行文件读写操作。下文中,将使用BTrace对该程序进行监控。

​

​

1.监控指定函数耗时

使用BTrace脚本可以通过正则表达式,指定监控特定类的特定方法的耗时。以下代码将监控所有类中名为writeFile()的方法的执行时间。

以上脚本使用@OnMethod注解指定要监控的类和方法名称。它在方法开始运行时记录方法的起始执行时间,在方法返回时记录方法的终止时间,从而计算方法的运行耗时。将这段脚本注入样例目标程序,部分输出结果如下:

​

注意:通过BTrace脚本,可以监控指定的某一个方法的运行耗时。

2.取得任意行代码信息

通过BTrace脚本的@Location注解,可以指定程序运行到某一行代码时触发某种行为。下例显示了通过BTrace脚本,获取BTraceTest类第26行代码的信息(当目标程序运行到第26行时,触发BTrace脚本)。

以上脚本在目标程序运行到第26行时触发,并打印该行信息。该脚本的部分输出结果如下:

​

由脚本输出可以看到,BTrace正确识别了BTraceTest类的第26行代码,正处于readFile()函数的运行区间中。若将@Location中line的值设置为-1,则BTrace脚本将在每一行触发。

3.定时触发

BTrace脚本支持定时触发,可以周期性地执行某种行为,以获取系统信息。下例使用@OnTimer注解分别制定两个周期性任务,分别为每秒运行一次和每3s运行一次。

​

在脚本的第6行,指定一个每秒运行一次的任务,并打印虚拟机的启动时间。在第12行,指定一个每3s运行一次的任务,每次都将导出系统的线程快照。

注意:通过BTrace可以在当前应用程序中定时获取一些运行时的系统信息。

4.监控函数参数

BTrace可以在运行时,监控传递给指定类的指定方法的参数,以获取应用系统执行时的内部细节信息,帮助程序排错和调优。

以上脚本监控BTraceTest类的writeFile()方法,并在每次方法调用时输出系统传递给该方法的参数。程序的部分输出结果如下:

加粗部分即为writeFile()方法的接收参数。通过BTrace在不影响系统正常运行的情况下,捕获了所有指定方法的调用及传入参数。

注意:BTrace可以跟踪指定方法的传入参数,获取方法的参数值,这对于现场问题排查会很有帮助。

5.监控文件

通过对I/O函数的监控,BTrace还可以捕获系统的I/O情况。下例中,通过BTrace脚本对FileInputStream和FileOutputStream对象进行监控,输出程序在运行时通过FileInputStream和FileOutputStream读取和写入的文件。

脚本中截获了FileOutputStream和FileInputStream的构造函数,记录读写的文件名称并将其输出。部分输出结果如下:

注意:在本例中,BTrace通过截获FileOutputStream和FileInputStream构造函数的方式监控文件I/O操作。如果文件I/O没有通过这两个构造函数发起,那么就无法通过这个脚本获得相关文件信息。

Java性能调优:利用VisualVM进行性能分析 VisualVM 是Netbeans的profile子项目,已在JDK6.0 update 7 中自带,能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪几个对象分配出来的)。在JDK_HOME/bin(默认是C:\Program Files\Java\jdk1.6.0_13\bin)目录下面,有一个jvisualvm.exe文件,双击打开,从UI上来看,这个软件是基于NetBeans开发的了。 阅读详情

相关推荐

visualvm工具远程对linux服务器上的JVM虚拟机进行监控与调优方案

visualvm工具远程对linux服务器上的JVM虚拟机进行监控与调优方案。

朱季谦 3256

Java 使用 VisualVM 排查内存泄露

这个方法会创建 Trace 上下文对象 TracingContext 并将其设置到 ThreadLocal 中,创建出 TracingContext 对象后还会调用其相关方法创建 LocalSpan 对象,并将创建的 LocalSpan 对象存入 TracingContext 内部的。此时查看该对象的链表的具体元素数据,可以看到总共有1万多个元素,点开第一个节点,查看该 LocalSpan 的名称,确定当前 SkyWalking 的 trace 记录的起点为这个 LocalSpan 的创建。

谈谈1974 1万+

水气泵控制原理,三角波发生电路,LM331M/TR芯片,高速运放芯片

气泵的控制采用闭环控制,根据气泵的FG反馈信号进行反馈调节,由于气泵的反馈信号是脉冲反馈,即频率改变,占空比不变,即需要通过F/V转换芯片转换成电压信号,变为电压与转速成正比,其电压进入比较器与基准电压进行比较,将比较结果进行运算并进行PWM控制信号。水泵的控制采用闭环控制,根据水泵的pwm信号进行反馈调节,水泵的反馈信号是脉冲反馈,即频率改变,占空比不变,即需要通过F/V转换芯片转换成电压信号,变为电压与转速成反比,其电压进入比较器与基准电压进行比较,将比较结果进行运算并对PWM控制信号。

m0_51010122的博客 2857

visualvm工具使用教程

Jvisualvm工具使用教程。一、插件安装:jvisualvm是随jdk一同发布的jvm诊断工具,通过插件可以扩展很多功能,插件扩展也是jvisualvm的精华所在。 一、插件安装 jvisualvm是随jdk一同发布的jvm诊断工具,通过插件可以扩展很多功能,插件扩展也是jvisualvm的精华所在。 打开该工具,通过菜单“工具”—>“插件”开发以下对话框: 在可用

落叶_19950624 4万+

研究生研一学习机器学习ML、深度学习DL的规划

研究生学习机器学习DL、深度学习DL的规划 保上研之后也没有很好规划自己的学习路线,看到b站上的一位清华博士讲述他本科也是机械跨考计算机的学习路线,所以记录下来,从现在开始按照规划来一点一点地做好。 掌握python(推荐一周) 1.1 面向对象编程 廖雪峰python网站: https://www.liaoxuefeng.com 1.2 数据分析Numpy numpy 100题: https://www.yanxishe.com/columnDetail/24784 1.3数据分析pandas pan

没有最好,只有更好 3100

手把手教你用UM982搭建厘米级RTK定位系统(附避坑指南)

本文详细介绍了如何使用UM982模组搭建厘米级RTK定位系统,涵盖硬件连接、软件配置和深度优化技巧。UM982支持BDS、GPS、GLONASS和Galileo等多系统全频点信号,特别适合精准农业、无人机导航等高精度应用场景。通过实战案例和避坑指南,帮助开发者快速实现厘米级定位精度。

y7z8a的博客 1438

低调不失奢华。“Java性能调优六大工具”之VisualVM多合一工具

VisualVM多合一工具 VisualVM是一个功能强大的多合一故障诊断和性能监控的可视化工具。它集成了多种性能统计工具的功能,使用VisualVM可以代替jstat、jmap、jhat、jstack甚至是JConsole。在JDK6update7以后,VisualVM便作为JDK的一部分被发布出来,它完全免费。 VisualVM也可以作为独立的软件进行安装,读者可以在http://visualvm.java.net上下载并安装VisualVM的最新版本。 在本节的介绍中,笔者所使用的VisualV

m0_67778103的博客 1642

第一章 Cheat Enginee(CE)使用指南

Cheat Engine核心功能详细说明(以植物大战僵尸为例) 教你修改单机游戏。

m0_74545731的博客 1万+

低调不失奢华 “Java性能调优六大工具”之VisualVM多合一工具

VisualVM多合一工具 VisualVM是一个功能强大的多合一故障诊断和性能监控的可视化工具。它集成了多种性能统计工具的功能,使用VisualVM可以代替jstat、jmap、jhat、jstack甚至是JConsole。在JDK6update7以后,VisualVM便作为JDK的一部分被发布出来,它完全免费。 VisualVM也可以作为独立的软件进行安装,读者可以在http://visualvm.java.net上下载并安装VisualVM的最新版本。 在本节的介绍中,笔者所使用的VisualV

公众号:该用户快成仙了 881

PCL点云八叉树体素中心下采样,体素包含点索引提取

基于PCL octree实现点云八叉树计算,支持提取体素中心点进行点云下采样;根据任一点坐标,可以得到其在八叉树中的位置,输出对应体素内其余点的坐标或者索引

qq_48694523的博客 463

手把手教你学PCIE(11.3)--pcie的认证和合规性测试

PCIe 设备的认证和合规性测试是确保设备正常工作和达到预期性能的关键步骤。通过使用 PCI-SIG 提供的测试工具和第三方测试工具,可以全面评估 PCIe 设备的物理层、链路层、事务层和互操作性,确保设备符合行业标准和规范。

MHD0815的博客 1360

VisualVM:JVM性能监控与调优之道

在当今的软件开发领域,JVM(Java虚拟机)作为Java语言运行的核心,其性能和稳定性直接影响到应用程序的运行效率。VisualVM作为一款强大的JVM性能监控和分析工具,对于Java开发者和系统管理员来说,掌握其使用方法至关重要。以下将围绕VisualVM这一JVM核心知识点进行详细阐述。在实际应用中,我们常常会遇到这样的场景:一个Java应用程序在运行过程中,由于代码逻辑错误或资源管理不当,导致内存泄漏、CPU占用过高、线程阻塞等问题,这些问题如果不及时解决,将严重影响系统的稳定性和用户体验。

JavaCodePro的博客 1131

【软件系统架构】系列六:MBSE(基于模型的系统工程)

基于模型的系统工程(MBSE)是一种以模型为核心的系统工程方法论,通过结构化、可视化的模型取代传统文档,实现从需求到验证的全生命周期管理。MBSE采用SysML建模语言,包含需求、功能、架构和验证四大要素,支持自动追踪、仿真分析和代码生成。相比文档式工程,MBSE具有变更影响自动分析、跨团队协作和高可视化等优势,广泛应用于航空航天、汽车电子等领域。典型开发流程包括需求建模、行为建模、架构建模等阶段,配合MagicDraw、Cameo等工具链实现。MBSE正与数字孪生、AI技术融合,推动自动化建模和智能验证的

moton2017的博客 2785

【JAVA】JVM调优工具

JVM调优工具

weixin_37559642的博客 1136

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

二、JAVA性能调优之jdk命令工具

jdk在性能遇到问题时,常用的查看分析命令有 - jps:类似linux中的ps; - jstat:通过这个命令,可以查看堆信息的详细情况; - jinfo:可统计CPU内存使用情况、swap使用情况等信息; - jmap:导出堆快照信息进行分析; - jstack:导出java程序的线程堆栈;

guyua的博客 1161

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

低调不失奢华“Java性能调优六大工具”之VisualVM多合一工具

VisualVM多合一工具 VisualVM是一个功能强大的多合一故障诊断和性能监控的可视化工具。它集成了多种性能统计工具的功能,使用VisualVM可以代替jstat、jmap、jhat、jstack甚至是JConsole。在JDK6update7以后,VisualVM便作为JDK的一部分被发布出来,它完全免费。 VisualVM也可以作为独立的软件进行安装,读者可以在http://visualvm.java.net上下载并安装VisualVM的最新版本。 在本节的介绍中,笔者所使用的VisualV

m0_63256311的博客 258

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

低调不失奢华,“Java性能调优六大工具”之VisualVM多合一工具

VisualVM多合一工具 VisualVM是一个功能强大的多合一故障诊断和性能监控的可视化工具。它集成了多种性能统计工具的功能,使用VisualVM可以代替jstat、jmap、jhat、jstack甚至是JConsole。在JDK6update7以后,VisualVM便作为JDK的一部分被发布出来,它完全免费。 VisualVM也可以作为独立的软件进行安装,读者可以在http://visualvm.java.net上下载并安装VisualVM的最新版本。 在本节的介绍中,笔者所使用的VisualV

Javaesandyou的博客 670

Java 性能调优:使用 VisualVM 进行内存和线程分析

VisualVM 是一款集成了多个 JDK 命令行工具功能的可视化工具,它不仅可以监控本地 Java 应用,还支持远程监控。其功能涵盖了 Java 应用的性能分析、内存分析、线程分析、类加载分析等多个方面,并且提供了丰富的插件扩展机制,可满足不同场景下的性能调优需求。VisualVM 作为一款强大的 Java 性能分析工具,为我们提供了全面而直观的内存和线程分析功能。通过合理运用 VisualVM 的各项功能,我们能够快速定位和解决 Java 应用中常见的性能问题,如内存泄漏、线程阻塞、死锁等。

数字魔方操控师的博客 1472

JVM 调优的工具

JVM 调优是一个复杂而关键的过程,需要结合应用的特性、运行环境、性能需求等多个因素进行综合考虑。通过合理使用 JVM 参数和调优工具,可以有效地提升 Java 应用的性能和稳定性。上述工具各有侧重,JConsole 和 VisualVM 适合日常的监控和初步调优,而 jstat、jstack、jmap 等命令行工具则更适合在生产环境中进行实时诊断和分析。对于深入的内存问题分析,Eclipse MAT 和 G1 GC Log Analyzer 等工具提供了更专业的支持。

Flying_Fish_roe的博客 822

Java 性能调优与监控工具详解

性能调优和监控是Java开发中不可或缺的一部分,通过使用合适的工具和策略,可以有效提高应用程序的性能和稳定性。希望本文的介绍和示例能够帮助读者更好地理解和实践Java性能调优。通过不断的实践和学习,掌握这些技能将能够显著提升你的Java编程水平。

weixin_53840353的博客 807

Java 性能调优实战:使用 VisualVM 分析和优化内存与 CPU 性能

VisualVM 提供了一个直观且易于操作的可视化界面,可对本地和远程的 Java 应用程序进行全方位监控。内存监控:实时展示堆内存、非堆内存的使用状况,助力开发者及时察觉内存泄漏等潜在问题,并通过生成内存快照深入分析内存中的对象分布情况。线程监控:清晰呈现线程的状态,包括运行、等待、阻塞等,具备高效的死锁检测功能,还能通过线程转储生成线程快照,详细分析线程的调用栈,从而找出性能瓶颈所在。CPU 分析。

数字魔方操控师的博客 955

Java 性能调优全攻略:步骤、工具、技巧一网打尽

Java性能调优是一项非常重要的工作,它可以提高应用程序的性能和可伸缩性,并确保应用程序在高负载情况下仍然能够快速、稳定地运行。

Hanko的专栏 2675
上一篇: 实力解决“疑难杂症”,Java性能调优JDK命令行工具
下一篇: 强大功能的免费内存分析器,Java性能调优MAT内存分析工具
Java_LingFeng
博客等级 码龄4年 505粉丝 259原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值