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

相关文章
|
1月前
|
Cloud Native Java Docker
【Spring云原生】Spring官宣,干掉原生JVM,推出 Spring Native!整体提升性能!Native镜像技术在Spring中的应用
【Spring云原生】Spring官宣,干掉原生JVM,推出 Spring Native!整体提升性能!Native镜像技术在Spring中的应用
|
6月前
|
XML Java 测试技术
Graalvm 替代 JVM 真的可以带来巨大的性能优势吗?
介绍 Spring Boot有助于轻松开发独立的、可用于生产的 Spring 应用程序。它对 Spring 平台和第三方库采用固执己见的方法:以最少的配置简化设置过程。优势: 易于使用:Spring Boot 简化了独立 Spring 应用程序的创建,无需复杂的配置。 嵌入式服务器:它允许直接嵌入 Tomcat、Jetty 或 Undertow 等服务器,从而无需单独部署 WAR 文件。 Starter 依赖项:Spring Boot 提供预配置的“starter”依赖项,降低了构建配置的复杂性。 自动配置:Spring Boot 自动配置 Spring 和第三方库,最大限度地减少手动设置工
|
3月前
|
架构师 Java 关系型数据库
一线架构师开发总结:剖析并发编程+JVM性能,深入Tomcat与MySQL
每一个程序员都有自己清晰的职业规划和终极目标,无论之后是继续钻研技术,还是转管理岗、产品岗,都是需要自己具备有一定的实力,换句话说技术要牛逼。架构师,是很多程序员的终极目标,而成为一名Java架构师,那就需要对自己自身有一定要求,不仅技术能力要过硬,还需要有组织能力和提出解决方案的能力。那么作为架构师,需要掌握哪些技术呢?
一线架构师开发总结:剖析并发编程+JVM性能,深入Tomcat与MySQL
|
3月前
|
存储 缓存 算法
jvm性能调优实战 - 34十万QPS的社交APP 如何优化GC性能提升3倍?
jvm性能调优实战 - 34十万QPS的社交APP 如何优化GC性能提升3倍?
64 0
jvm性能调优实战 - 34十万QPS的社交APP 如何优化GC性能提升3倍?
|
3月前
|
监控 安全 算法
深入了解JVM调优:解锁Java应用程序性能的秘诀
深入了解JVM调优:解锁Java应用程序性能的秘诀
|
6月前
|
监控 Java 中间件
104分布式电商项目 - JVM调优(性能问题)
104分布式电商项目 - JVM调优(性能问题)
26 0
|
存储 Java 块存储
JVM性能
JVM性能
102 0
JVM性能
|
Java 应用服务中间件 程序员
我就改了一下参数,竟然让Tomcat和JVM的性能提升了两倍!
在工作中,作为 Java 开发的程序员,Tomcat 服务器是大家常用的,也是很多公司现在正在用的。但是,在系统并发量比较大的情况下,Tomcat 就会出现卡死和自动关闭等问题。如何优化 Tomcat,让它更高效的运行就成了问题,在本篇小编中,我将为你分享如何更好的提升 Tomcat 性能。
142 0
|
Java 应用服务中间件 测试技术
JVM性能优化(四)提高网站访问性能之Tomcat优化(2)
JVM性能优化(四)提高网站访问性能之Tomcat优化
118 0
JVM性能优化(四)提高网站访问性能之Tomcat优化(2)
|
缓存 网络协议 Java
JVM性能优化(四)提高网站访问性能之Tomcat优化(1)
JVM性能优化(四)提高网站访问性能之Tomcat优化
98 0
JVM性能优化(四)提高网站访问性能之Tomcat优化(1)