jvm
虚拟机性能监控与故障处理工具
概述
给一个系统定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。数据包括:运行日志、异常堆栈,堆转储快照。
jdk的命令行工具
- jdk/bin目录下存在诸如“java.exe”等各种小巧的命令行工具
- 这些工具都非常稳定而且功能强大,能在处理应用程序性能问题、定位故障时发挥很大作用
- 这些命令行工具大多数是jdk/lib/tools.jar类库的一层薄包装,主要功能代码是在tools类库中实现的
- 借助tools.jar类库里面的接口,我们可以直接在应用程序中实现功能强大的监控分析功能
- 若读者在工作中需要监控运行于jdk1.5的虚拟机之上的程序,在程序启动时添加参数“-Dcom.sun.management.jmxremote”开启JMX管理功能。
- sun jdk监控和故障处理工具
jps -- jvm process status tool显示指定系统内所有的Hotspot虚拟机进程
jstat -- jvm statistics mointoring tool收集Hotspot虚拟机各方面的运行数据
jinfo -- configuration info for java显示虚拟机配置信息
jmap -- memory map for java生成虚拟机的内存转储快照
jhat -- jvm heap dump browser用于分析heapdump文件,它会建立一个http/html服务器,让用户可以在浏览器上查看分析结果
jstack -- 虚拟机的线程快照
jps:虚拟机进程状况工具
- 功能:可以列出正在运行的虚拟机进程,并显示虚拟机执行主类名称以及这些进程的本地虚拟机唯一ID
- jps命令格式:
jps [options] [hostid]
- jps可以通过RMI协议查询开启了RMI服务的远程虚拟机进程状态,hostid为RMI注册表中注册的主机名。
jstat:虚拟机统计信息监视工具
- jstat是用于监视虚拟机各种运行状态信息的命令行工具。
- 可显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、jit编译等运行数据
- jstat命令格式:
jstat [option vmid [interval][s|ms] [count]]
选项option代表着用户希望查询的虚拟机信息,主要分为三类:类装载、垃圾收集、运行期编译状况
- 使用jstat工具在纯文本状态下监视虚拟机状态的变化
jinfo:java配置信息工具
- jinfo的作用是实时地查看和调整虚拟机各项参数。使用jps命令的-v参数可以查看虚拟机启动时显示指定的参数列表,但如果想知道未被显式指定的参数的系统默认值,可以使用jinfo的-flag选项进行查询了
- jinfo命令格式:
jinfo [option] pid
jmap:java内存映像工具
- jmap命令用于生成堆转存储快照
- jmap的作用不仅仅是为了获取dump文件,还可以查询finalize执行队列、Java堆和永久代的详细信息
- jmap命令格式:
jmap [option] vmid
jhat:虚拟机堆转存储快照分析工具
- sunjdk提供jhat命令与jmap搭配使用,来分析jmap生成的堆转储快照。
- jhat内置了一个微型的http/HTML服务器,生成dump文件的分析结果后,可以在浏览器中查看
jstack:java堆栈跟踪工具
- 用于生成虚拟机当前时刻的线程快照
线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因
- 线程出现停顿的时候通过jstack来查看各个线程的调用栈
- jstack命令格式:
jstack [option] vmid
HSDIS:JIT生成代码反汇编
- sun官方推荐的Hotspot虚拟机JIT编译代码的反汇编插件,它包含在Hotspot虚拟机的源码之中,但没有提供编译后的程序。
JDK的可视化工具
- JConsole和VisualVM,这两个工具是JDK的正式成员
JConsole:Java监视与管理控制台
- JConsole是一种基于JMX的可视化监视、管理工具,它的管理部分的功能是针对JMXMBean进行管理,由于MBean可以使用代码、中间件服务器的管理控制台或者所有符合JMX规范的软件进行访问
- 通过jdk/bin下的jcosole.exe启动,将自动搜索本机运行的所有虚拟机进程
VisualVM:多合一故障处理工具
目前功能最强大的运行监视和故障处理程序