【JVM系列5】性能检测工具

简介: 这篇文章是结合上一篇文章《【JVM系列4】JVM常用命令》来讲的,上一篇文章讲的是JVM一些常用的命令,但是通过命令的方式查看JVM的指标非常费劲,还是图形化工具香,如果在跟进线上机器的JVM问题时,可能还是离不开JVM命令。

[ZEDZXHYA6]7F@_CHTW)@9X.jpg

讲解JVM的性能检测工具,主要是一些图形化的工具。


前言

这篇文章是结合上一篇文章《【JVM系列4】JVM常用命令》来讲的,上一篇文章讲的是JVM一些常用的命令,但是通过命令的方式查看JVM的指标非常费劲,还是图形化工具香,如果在跟进线上机器的JVM问题时,可能还是离不开JVM命令。


图形化工具


jconsole

Jconsole(Java Monitoring and Management Console)是从java5开始,在JDK中自带的java监控和管理控制台,用于对JVM中内存,线程和类等的监控,是一个基于JMX(java management extensions)的GUI性能监测工具。jconsole使用jvm的扩展机制获取并展示虚拟机中运行的应用程序的性能和资源消耗等信息。

JConsole程序位于%JAVA_HOME%bin目录下,直接通过命令启动:

JConsole

~WRA$`[KS5S@7N$~A`_UZ86.png


概览:包括堆内存使用情况、线程、类、CPU使用情况四项信息的曲线图。

0_LSNU(}8]%~GQ0WZBW$65D.jpg


内存:主要展示了内存的使用情况,同时可以查看堆和非堆内存的变化值对比。

%U1`G@F8YUK]8~CDI7FSQUE.png


线程:相当于可视化的jstack命令,同时也可以点击“检测死锁”来检查线程之间是否有死锁的情况。

image.gifI7Q2)5B)3G2}14%YA3PZ2KA.png

VM概要:展示JVM所有信息总览,包括基本信息、线程相关、堆相关、操作系统、VM参数等。

image.gif``UHJ8E[]%7VFF]~O`TK64V.png

其实我主要是想用这个工具检测线上机器,后面我再把线上机器的监控倒腾一下。


VisualVM

VisualVM(All-in-One Java Troubleshooting Tool)是功能最强大的运行监视和故障处理程序之一,曾经在很长一段时间内是Oracle官方主力发展的虚拟机故障处理工具。

相比一些第三方工具,VisualVM有一个很大的优点:不需要被监视的程序基于特殊Agent去运行,因此它的通用性很强,对应用程序实际性能的影响也较小,使得它可以直接应用在生产环境中。

VisualVM程序位于%JAVA_HOME%bin目录下,直接通过命令启动:

jvisualvm

0]C)JZEMC]HE61J75MD$74W.jpg


可以安装插件,点击工具->插件:

4_VDRKVV9%2E65YIFA9)F)B.jpg


Visual GC 是常常使用的一个功能,需要通过插件按照,可以明显的看到年轻代、老年代的内存变化,以及gc频率、gc的时间等,感觉这个插件很酷!

KZE$3}IU[C`7~C4JGQM6ZOC.png

监控%XQ@@VA9J3SX$`G81QY(3O7.png的主页其实也就是,cpu、内存、类、线程的图表,这里面可以执行堆dump。

image.gif

线程和jconsole功能没有太大的区别。

(%V@P`{W@F8LFL2PS2T6)QF.png

最后就是堆dump:

WI{XHZA2YQEA@2ZP_6PTR2P.jpg

和jconsole比起来,VisualVM用起来更方便,因为jconsole的功能,VisualVM基本都包含,然后VisualVM还可以分析dump文件,然后还有很多可选的插件,真香!


第三方工具

以上三个都是JDK自带的性能监控工具,除此之外还有一些第三方的性能监控工具。

  • MAT:Java 堆内存分析工具。
  • GChisto:GC 日志分析工具。
  • GCViewer:GC 日志分析工具。
  • JProfiler:商用的性能分析利器。
  • arthas:阿里开源诊断工具。
  • async:Java 应用性能分析工具,开源、火焰图、跨平台。


远程机器配置JVM可视化视图


前面的示例都是在本地测试,这里我主要通过VisualVM图像化工具,看如何连接上线上机器。

通过jstatd启动RMI

先登录线上机器,执行"echo $JAVA_HOME"查看目录,然后进入该目录的bin目录下面:

image.gifPA1TB7$Y__FVT5$17{N%}DQ.png

在该目录下新建文件jstatd.all.policy,然后将下面的代码copy到该文件中:

grant codebase "file:${java.home}/../lib/tools.jar" {
    permission java.security.AllPermission;
};

执行:

./jstatd -J-Djava.security.policy=jstatd.all.policy &

image.gif

配置JMX管理Tomcat

先进入Tomcat的bin目录下面,然后打开catalina.sh文件,会发现这个文件前面都是一堆注释,注意!!!就在这一堆注释后面加上一行代码(其实也可以说,就在这个文件的第一行加上一行代码):

JAVA_OPTS=-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false

)DTPZNHR(2K`P)G$SF@H]0P.pngimage.gif

下来说说上面几个参数的意义:

-Dcom.sun.management.jmxremote :允许使用JMX远程管理
-Dcom.sun.management.jmxremote.port=9999 :JMX远程连接端口
-Dcom.sun.management.jmxremote.authenticate=false :不进行身份认证,任何用户都可以连接
-Dcom.sun.management.jmxremote.ssl=false :不使用ssl

远程机器视图

挂载远程机器:

7T}%~]S}60VYD2(T@P8R6JT.png


配置端口:EBS9BYJR(I8JE@[3@6X3DWX.jpg


界面输出:C}WE1Q746HDX{[N6)%~Q2OC.png

这个方式其实是按照网上的教程操作的,我操作的是公司远程测试环境的机器,但是我操作过程中,其实没有走“配置端口”这一步,也就是只操作了“通过jstatd启动RMI”,就可以通过该工具显示JVM视图,感觉和网上说的不一样。

但是我操作线上机器时,这个JVM视图还是出不来,我理解如下:

  • 测试环境之所以能展示JVM视图,是因为它走的HTTP,所以无需再配置JAVA_OPTS的jmxremote参数;
  • 线上机器是HTTPS,是需要走“配置JMX管理Tomcat”,也就是在JAVA_OPTS中配置jmxremote的参数信息。(这里我还没有尝试,因为是线上机器,不敢乱动~~)
  • 配置JAVA_OPTS不一定非要按照网上说的教程来,你也可以把JAVA_OPTS通过其它方式进行配置,比如我是通过公司自带的Docker容器进行配置;

因为线上环境不能随便动,所以就没有修改线上环境的JAVA_OPTS配置,对于HTTPS机器JVM图像化展示,可以参考:https://www.cnblogs.com/sunshine-2015/p/5547128.html


后记


倒腾这些JVM可视化工具,倒腾了接近一天,感觉还是挺有意思的,本地和远程测试环境都可以通过VisualVM进行JVM可视化展示,唯一的遗憾是线上环境没有配置出来,所以还是有点不甘心,后续有空的话,我还是想把线上环境的可视化视图给倒腾出来。

相关文章
|
3月前
|
存储 监控 算法
jvm-性能调优(二)
jvm-性能调优(二)
|
5月前
|
Arthas 监控 Java
(十一)JVM成神路之性能调优篇:GC调优、Arthas工具详解及各场景下线上最佳配置推荐
“在当前的互联网开发模式下,系统访问量日涨、并发暴增、线上瓶颈等各种性能问题纷涌而至,性能优化成为了现时代开发过程中炙手可热的名词,无论是在开发、面试过程中,性能优化都是一个常谈常新的话题”。
509 3
|
5月前
|
监控 Java 测试技术
JVM 性能调优 及 为什么要减少 Full GC
JVM 性能调优 及 为什么要减少 Full GC
128 4
|
6月前
|
监控 Java 调度
探秘Java虚拟机(JVM)性能调优:技术要点与实战策略
【6月更文挑战第30天】**探索JVM性能调优:**关注堆内存配置(Xms, Xmx, XX:NewRatio, XX:SurvivorRatio),选择适合的垃圾收集器(如Parallel, CMS, G1),利用jstat, jmap等工具诊断,解决Full GC问题,实战中结合MAT分析内存泄露。调优是平衡内存占用、延迟和吞吐量的艺术,借助VisualVM等工具提升系统在高负载下的稳定性与效率。
106 1
|
2月前
|
存储 缓存 监控
聊聊JIT是如何影响JVM性能的!
聊聊JIT是如何影响JVM性能的!
|
3月前
|
Kubernetes Java 编译器
解锁极致性能:Quarkus如何让JVM应用调优变得前所未有的简单与高效!
Quarkus是一款专为GraalVM和OpenJDK设计的Kubernetes Native Java框架,采用AOT编译技术将Java应用转化为本地代码,大幅提升启动速度与运行效率。它简化了性能调优流程,如自动优化垃圾回收、类加载、内存管理及线程管理等,使开发者无需深入理解JVM细节即可轻松提升应用性能。与传统JVM应用相比,Quarkus显著降低了性能调优的复杂度。
122 2
|
5月前
|
运维 Java Linux
(九)JVM成神路之性能调优、GC调试、各内存区、Linux参数大全及实用小技巧
本章节主要用于补齐之前GC篇章以及JVM运行时数据区的一些JVM参数,更多的作用也可以看作是JVM的参数列表大全。对于开发者而言,能够控制JVM的部分也就只有启动参数了,同时,对于JVM的性能调优而言,JVM的参数也是基础。
124 8
|
5月前
|
缓存 监控 Java
Java虚拟机(JVM)性能调优实战指南
在追求软件开发卓越的征途中,Java虚拟机(JVM)性能调优是一个不可或缺的环节。本文将通过具体的数据和案例,深入探讨JVM性能调优的理论基础与实践技巧,旨在为广大Java开发者提供一套系统化的性能优化方案。文章首先剖析了JVM内存管理机制的工作原理,然后通过对比分析不同垃圾收集器的适用场景及性能表现,为读者揭示了选择合适垃圾回收策略的数据支持。接下来,结合线程管理和JIT编译优化等高级话题,文章详细阐述了如何利用现代JVM提供的丰富工具进行问题诊断和性能监控。最后,通过实际案例分析,展示了性能调优过程中可能遇到的挑战及应对策略,确保读者能够将理论运用于实践,有效提升Java应用的性能。 【
213 10
|
5月前
|
JSON Java BI
一次Java性能调优实践【代码+JVM 性能提升70%】
这是我第一次对系统进行调优,涉及代码和JVM层面的调优。如果你能看到最后的话,或许会对你日常的开发有帮助,可以避免像我一样,犯一些低级别的错误。本次调优的代码是埋点系统中的报表分析功能,小公司,开发结束后,没有Code Review环节,所以下面某些问题,也许在Code Review环节就可以避免。
167 0
一次Java性能调优实践【代码+JVM 性能提升70%】
|
4月前
|
监控 算法 Java
深入理解Java虚拟机:JVM调优与性能提升
本文旨在为Java开发者提供一条清晰的路径,以深入掌握Java虚拟机(JVM)的内部机制和性能调优技巧。通过具体案例分析,我们将探讨如何识别性能瓶颈、选择合适的工具进行监控与调试,以及实施有效的优化策略,最终达到提高应用程序性能的目的。文章不仅关注理论,更注重实践应用,帮助读者在面对复杂的Java应用时能够游刃有余。
76 0