【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可视化展示,唯一的遗憾是线上环境没有配置出来,所以还是有点不甘心,后续有空的话,我还是想把线上环境的可视化视图给倒腾出来。

相关文章
|
2月前
|
缓存 Java 中间件
jvm性能调优实战 -55RPC调用引发的OOM故障
jvm性能调优实战 -55RPC调用引发的OOM故障
69 0
|
2月前
|
缓存 监控 Java
jvm性能调优实战 - 48无限循环调用和没有缓存的动态代理引起的OOM
jvm性能调优实战 - 48无限循环调用和没有缓存的动态代理引起的OOM
51 0
|
2月前
|
消息中间件 存储 Java
jvm性能调优实战 - 47超大数据量处理系统是如何OOM的
jvm性能调优实战 - 47超大数据量处理系统是如何OOM的
59 0
|
2月前
|
Java
jvm性能调优实战 - 46堆区OOM解析
jvm性能调优实战 - 46堆区OOM解析
53 0
|
2月前
|
缓存 监控 算法
jvm性能调优实战 - 39一次大促导致的内存泄漏和Full GC优化
jvm性能调优实战 - 39一次大促导致的内存泄漏和Full GC优化
117 0
|
15天前
|
监控 Java 调度
探秘Java虚拟机(JVM)性能调优:技术要点与实战策略
【6月更文挑战第30天】**探索JVM性能调优:**关注堆内存配置(Xms, Xmx, XX:NewRatio, XX:SurvivorRatio),选择适合的垃圾收集器(如Parallel, CMS, G1),利用jstat, jmap等工具诊断,解决Full GC问题,实战中结合MAT分析内存泄露。调优是平衡内存占用、延迟和吞吐量的艺术,借助VisualVM等工具提升系统在高负载下的稳定性与效率。
32 1
|
5天前
|
缓存 监控 算法
Java面试题:讨论JVM性能调优的常见方法和技巧。
Java面试题:讨论JVM性能调优的常见方法和技巧。
10 1
|
14天前
|
监控 Java 调度
探索JVM性能调优,调优不仅是技术挑战,更是成长过程。
【7月更文挑战第1天】探索JVM性能调优:** 本文深入JVM内存模型,关注堆内存与方法区、栈的优化,通过调整-Xms, -Xmx及垃圾收集器参数减少GC频率。探讨了Serial到G1等垃圾收集器的选择策略,利用jstat、jmap等工具诊断性能瓶颈。实战案例中,通过问题定位、内存分析解决Full GC问题,强调开发者需理解JVM原理,运用工具在复杂场景下实现高效调优。调优不仅是技术挑战,更是成长过程。
19 0
|
18天前
|
Java UED 开发者
JVM逃逸分析原理解析:优化Java程序性能和内存利用效率
JVM逃逸分析原理解析:优化Java程序性能和内存利用效率
|
2月前
|
Arthas 人工智能 监控
JVM工作原理与实战(三十五):性能调优
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了性能调优、性能调优案例等内容。
36 1