第4章 虚拟机性能监控、故障处理工具

book:《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)周志明》

4.1 概述

给一个系统定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。这里说的数据包括但不限于异常堆栈、虚拟机运行日志、垃圾收集器日志、线程快照(threaddump/javacore文件)、堆转储快照(heapdump/hrof文件)等。恰当地使用虚拟机故障处理、分析的工具可以提升我们分析数据、定位并解决问题的效率。

4.2 基础故障处理工具

4.2.1 jps:虚拟机进程状况工具

jps:可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class,main()函数所在的类)名称以及这些进程的本地虚拟机唯一ID(LVMID,Local Virtual Machine Identifier)。
jps还可以通过RMI协议查询开启了RMI服务的远程虚拟机进程状态,参数hostid为RMI注册表中注册的主机名。

4.2.2 jstat:虚拟机统计信息监视工具

jstat(JVM Statistics Monitoring Tool)是用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类加载、内存、垃圾收集、即时编译等运行时数据,在没有GUI图形界面、只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的常用工具。

用例:

jstat -gcutil 7304
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT    CGC    CGCT     GCT   
  0.00  44.06  39.52  70.35  93.62  88.93    103    0.644    12    0.322     +        +    0.966

查询结果表明:该进程的新生代Eden(E,表示Eden)使用了39.52%的空间,2个Survivor区(S0、S1,表示Survivor0、Survivor1)分别使用了0和44.06%的空间。老年代(O,表示 Old)使用了70.35%的空间。程序运行以来共发生Minor GC(YGC,表示Yong GC)16次,总耗时0.644秒;发生Full GC(FGC,表示Full GC)12次,总耗时(FGCT,表示Full GC Time)为0.322秒;所有GC总耗时(GCT,表示 GC Time)为0.966秒。

4.2.3 jinfo:Java配置信息工具

jinfo(Configuration Info for Java)的作用是实时查看和调整虚拟机各项参数。jinfo的-flag选项可以查看虚拟机启动时未被显式指定的参数的系统默认值。jinfo还可以使用-sysprops选项把虚拟机进程的System.getProperties()的内容打印出来。

4.2.4 jmap:Java内存映像工具

jmap(Memory Map for Java)命令用于生成堆转储快照(一般称为heapdump或dump文件)。jmap还可以查询finalize执行队列、Java堆和方法区的详细信息,如空间使用率、当前用的是哪种收集器等。

4.2.5 jhat:虚拟机堆转储快照分析工具

JDK提供jhat(JVM Heap Analysis Tool)命令与jmap搭配使用,来分析jmap生成的堆转储快照。jhat内置了一个微型的HTTP/Web服务器,生成的堆转储快照的分析结果后,可以在浏览器查看。
这个工具基本不会用到。因为一般不会在部署应用程序的服务器上直接分析堆转储快照,复制到其他机器以后,也没必要使用命令行分析,而是用图形化分析工具。

4.2.6 jstack:Java堆栈跟踪工具

jstack(Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照(一般称为threaddump或者javacore文件)。
线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的目的通常是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间挂起等,都是导致线程长时间停顿的常见原因。
线程出现停顿时通过jstack来查看各个线程的调用堆栈,就可以获知没有响应的线程到底在后台做些什么事情,或者等待着什么资源。

4.2.7 基础工具总结

主要有以下几类:

  • 基础工具
  • 安全工具
  • 国际化工具
  • 远程方法调用工具
  • 部署工具
  • Java Web Start
  • 性能监控和故障处理工具
  • WebService工具
  • REPL和脚本工具

如上几类工具,如果想了解详情,自行翻书。

4.3 可视化故障处理工具

注意:本节原书给了很详细的用例和分析。这里只做了简单的总结。有需要,请看原书。

4.3.1 JHSDB:基于服务性代理的调试工具

JHSDB是一款基于服务性代理实现的进程外调试工具。服务性代理是HotSpot虚拟机虚拟机中一组用于映射Java虚拟机运行信息的、主要基于Java语言(含少量JNI代码)实现的API集合。

服务性代理以HotSpot内部的数据结构为参照物进行设计,把这些C++的数据抽象出Java模型对象,相当于HotSpot的C++代码的一个镜像。

通过服务性代理的API,可以在一个独立的Java虚拟机的进程里分析其他HotSpot虚拟机的内部数据,或者从HotSpot虚拟机进程内存中dump出来的转储快照里还原出它的运行状态细节。

4.3.2 JConsole:Java监视与管理控制台

JConsole(Java Monitoring and Management Console)是一款基于JMX(Java Management Extensions)的可视化监视、管理工具。

它的主要功能是通过JMX的MBean(Managed Bean)对系统进行信息收集和参数动态调整。

4.3.3 VisualVM:多合-故障处理工具

VisualVM(All-in-One Java Troubleshooting Tool)是功能最强大的运行监视和故障处理程序之一。另外,它还提供了性能分析等等功能。

VisualVM的性能分析功能比起JProfiler、YourKit等专业且收费的Profiling工具都不遑多让。而且相比这些第三方工具,VisualVM还有一个很大的优点:不需要被监视的程序基于特殊Agent去运行,因此它的通用性很强,对应用程序实际性能的影响也较小,使得它可以直接应用在生产环境中。这个优点是JProfiler、YourKit等工具无法与之媲美的。

4.3.4 Java Mission Control:可持续在线的监控工具

JFR(Java Flight Recorder)是一套内建在HotSpot虚拟机里面的监控和基于事件的信息搜集框架,与其他的监控工具(如JProfiling)相比,Oracle特别强调它”可持续在线“的特性。JFR在JFR在生产环境中对吞吐量一般不会高于1%,而且JFR监控过程的开始、停止都是完全可动态的,即不需要重启应用。JFR的监控对应用也是完全透明的,即不需要对应用程序的源码做任何修改,或者基于特定的代理来运行。

JMC(Java Mission Control)与虚拟机之间同样采取JMX协议进行通信,JMC一方面作为JMX控制台,显示来自虚拟机MBean提供的数据;另一方面作为JFR的分析工具,展示来自JFR的数据。启动后JMC的主界面如图4-24所示。

4.4 HotSpot虚拟机插件及工具

在HotSpot虚拟机的研发过程中,开发团队曾经编写过不少虚拟机的插件和辅助工具。它们存放在HotSpot源码hotspot/src/share/tools目录下,包括:

  • Ideal Graph Visualizer:用于可视化展示C2即时编译器是如何将字节码转化为理想图,然后转化为机器码的。
  • Client Compiler Visualizer:用户查看C1即时编译器生成高级中间表示(HIR),转换成低级中间表示(LIR)和物理寄存器分配的过程。
  • MakeDeps:帮助处理HotSpot的编译依赖的工具。
  • Project Creator:帮忙生成Visual Studio的project文件的工具。
  • LogCompilation:将-XX:+LogCompilation输出的日志整理成更容易阅读的格式的工具。
  • HSDIS:即时编译器的反汇编组件。

HSDIS:JIT生成代码反汇编

HSDIS是一个被官方推荐的HotSpot虚拟机即时编译代码的反汇编插件,它包含在一个HotSpot虚拟机的源码当中。

HSDIS插件的作用是让HotSpot的-XX:+PrintAssembly指令调用它来把即时编译器动态生成的本地代码还原为汇编代码输出,同时还会自动产生大量非常有价值的注释,这样我们就可以通过输出的汇编代码来从最本质的角度分析问题。

具体用法,请看原书。

补充:JVM的常用参数:
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值