《深入理解JAVA虚拟机》周志明 第三版 - 第四章 虚拟机性能监控、故障处理工具

4.1 概述

恰当地使用虚拟机故障处理、分析的工具可以提升我们分析数据、定位并解决问题的效率。

4.2 基础故障处理工具

JDK的bin目录中有java.exe、javac.exe这两个命令行工具,还有各种小工具,除了编译和运行Java程序外,打包、部署、签名、调试、监控、运维等各种场景都可能会用到它们。

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

可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class,main()函数所在的类)名称以及这些进程的本地虚拟机唯一ID,功能比较单一,但它绝对是使用频率最高的JDK命令行工具。

jps还可以通过RMI协议查询开启了RMI服务的远程虚拟机进程状态,参数hostid为RMI注册表中
注册的主机名。

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

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

4.2.3 jinfo:Java配置信息工具

是实时查看和调整虚拟机各项参数。使用jps命令的-v参数可以查看虚拟机启动时显式指定的参数列表,使用jinfo的-flag选项进行查询未被显式指定的参数的系统默认值。

4.2.4 jmap:Java内存映像工具

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

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

jhat内置了一个微型的HTTP/Web服务器,生成堆转储快照的分析结果后,可以在浏览器中查看。耗时而且极为耗费硬件资源,分析功能相对来说比较简陋。

4.2.6 jstack:Java堆栈跟踪工具

用于生成虚拟机当前时刻的线程快照(一般称为threaddump或者javacore文件),生成线程快照的目的通常是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间挂起等,都是导致线程长时间停顿的常见原因。

4.2.7 基础工具总结

在高版本的JDK中,这些工具大多已有了功能更为强大的替代品,譬如JCMD、JHSDB的命令行
模式,但使用方法也是相似的,无论JDK发展到了什么版本,学习这些基础的工具命令并不会过时和浪费。

4.3 可视化故障处理工具

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

JHSDB是一款基于服务性代理(Serviceability Agent,SA)实现的进程外调试工具。服务性代理是HotSpot虚拟机中一组用于映射Java虚拟机运行信息的、主要基于Java语言(含少量JNI代码)实现的API集合。在实际开发、学习时,可以用它来调试虚拟机进程或者dump出来的内存转储快照。

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

是一款基于JMX(Java Manage-ment Extensions)的可视化监视、管理工具。它的主要功能是通过JMX的MBean(Managed Bean)对系统进行信息收集和参数动态调整。JMX是一种开放性的技术,不仅可以用在虚拟机本身的管理上,还可以运行于虚拟机之上的软件中。虚拟机对JMX
MBean的访问也是完全开放的,可以使用代码调用API、支持JMX协议的管理控制台,或者其他符合JMX规范的软件进行访问。

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

是功能最强大的运行监视和故障处理程序之一,它除了常规的运行监视、故障处理外,还将提供其他方面的能力,譬如性能分析(Profiling)。VisualVM还有一个很大的优点:不需要被监视的
程序基于特殊Agent去运行,因此它的通用性很强,对应用程序实际性能的影响也较小,使得它可以直接应用在生产环境中。这个优点是JProfiler、YourKit等第三方工具无法与之媲美的。

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

现在的JMC不仅可以下载到独立程序,更常见的是作为Eclipse的插件来使用。JMC与虚拟机之间同样采取JMX协议进行通信,JMC一方面作为JMX控制台,显示来自虚拟机MBean提供的数据;另一方面作为JFR的分析工具,展示来自JFR的数据。

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:即时编译器的反汇编插件。

4.5 本章小结

灵活使用这些工具,可以为处理问题带来很大的便利。除了本章涉及的OpenJDK中自带的工具之外,还有很多其他监控和故障处理工具,如何进行监控和故障诊断,这并不是《Java虚拟机规范》中定义的内容,而是取决于虚拟机实现自身的设计。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值