前言:本篇文章是《深入理解Java虚拟机》读书笔记第三篇章,本篇文章并非JVM的重点知识,了解即可。 点击跳转第二篇
虚拟机性能监控和故障处理工具
基础故障处理工具
bin目录
JDK的bin目录下有java.exe、javac.exe这两个命令行工具,除了编译和运行Java程序外,打包、部署、签名、调试、监控、运维等各种场景都可能会用到它们
JPS
JPS是虚拟机进程状况工具,全程JVM Process Status Tool。它可以列出正在运行的虚拟机进程,并显示虚拟机执行主类名称以及这些进程的本地虚拟机唯一 ID。
命令格式
~~~bash jps [ options ] [ hostid ] ~~~
执行示例
~~~bash jps -l 2388 D:\Develop\glassfish\bin..\modules\admin-cli.jar 2764 com.sun.enterprise.glassfish.bootstrap.ASMain 3788 sun.tools.jps.Jps ~~~
jstat
jstat是用于监视虚拟机各种运行状态信息的命令行工具。全称是JVM Statistics Monitoring Tool。可以显示本地或者远程虚拟机进程中的类加载、内存、垃圾收集、即时编译等运行时数据。
命令格式
~~~bash jstat [ option vmid [interval[s|ms] [count]] ] ~~~
如果是本地虚拟机进程,VMID与LVMID 是一致的;如果是远程虚拟机进程,那VMID的格式应当是
~~~bash [protocol:][//]lvmid[@hostname[:port]/servername] ~~~
参数interval和count 代表查询间隔和次数,如果省略这2个参数,说明只查询一次。假设需要每250 毫秒查询一次进程2764垃圾收集状况,一共查询20次,那命令应当是
~~~bash jstat -gc 2764 250 20 ~~~
选项option代表用户希望查询的虚拟机信息,主要分为三类:类加载、垃圾收集、运行期编译状况。
jinfo
是Java配置信息工具。作用是实时查看和调整虚拟机各项参数。
jmap
是Java内存映像工具。用于生成堆转储快照
jhat
是虚拟机堆转储快照分析工具。与jmap搭配使用,来分析jmap生成的堆转储快照。
jstack
是Java堆栈跟踪工具。用于生成虚拟机当前时刻的线程快照
可视化故障处理工具
JHSDB
JDK中提供了JCMD和JHSDB两个集成式的多功能工具箱,它们不仅整合了所有 基础工具所能提供的专项功能,而且由于有着“后发优势”,能够做得往往比之前的老工具们更好、更强大。
JHSDB是一款基于服务性代理(Serviceability Agent,SA)实现的进程外调试工具。
使用以下命令进入JHSDB的图形化模式,并使其附加进程11180:
bash jhsdb hsdb --pid 11180
JConsole
JConsole(Java Monitoring and Management Console)是一款基于JMX(Java Manage-ment Extensions)的可视化监视、管理工具。它的主要功能是通过JMX的MBean(Managed Bean)对系统进 行信息收集和参数动态调整。
VisualVM
VisualVM(All-in-One Java Troubleshooting Tool)是功能最强大的运行监视和故障处理程序之一, 曾经在很长一段时间内是Oracle官方主力发展的虚拟机故障处理工具。
它除了常规的运行监视、故障处理外,还可以做性能分析等工作。因为它的通用性很强,对应用程序影响较小,所以可以直接接入到生产环境中。
VisualVM的插件可以手工进行安装,在网站上下载nbm包后,点击“工具->插件->已下载”菜单,然后在弹出对话框中指定nbm包路径便可完成安装。
Java Mission Control
JMC最初是BEA公司的产品,因此并没有像VisualVM那样一开始就基于自家的Net-Beans平台来开发,而是选择了由IBM捐赠的Eclipse RCP作为基础框架,现在的JMC不仅可以下载到独立程序,更常见的是作为Eclipse的插件来使用。JMC与虚拟机之间同样采取JMX协议进行通信,JMC一方面作为 JMX控制台,显示来自虚拟机MBean提供的数据;另一方面作为JFR的分析工具,展示来自JFR的数据。