5.虚拟机性能监控与故障处理工具

1.概述
定位一个系统问题的时候, 知识、 经验是关键基础, 数据是依据, 工具是运用知识处理数据的手段。 这里说的数据包括: 运行日志、 异常堆栈、 GC日志、 线程快照(threaddump/javacore文件) 、 堆转储快照(heapdump/hprof文件) 等。
2.JDK的命令行工具
目录:\jdk\jdk1.8.0_144\bin\
5.虚拟机性能监控与故障处理工具
2.1.jps(JVM Process Status Tool): 虚拟机进程状况工具
功能: 列出正在运行的虚拟机进程, 并显示虚拟机执行主类(Main Class,main() 函数所在的类) 名称以及这些进程的本地虚拟机唯一ID(Local Virtual Machine Identifier,LVMID) 。
5.虚拟机性能监控与故障处理工具
2.2 jstat: 虚拟机统计信息监视工具
jstat(JVM Statistics Monitoring Tool) 是用于监视虚拟机各种运行状态信息的命令行工具。 它可以显示本地或者远程虚拟机进程中的类装载、 内存、 垃圾收集、 JIT编译等运行数据, 在没有GUI图形界面, 只提供了纯文本控制台环境的服务器上, 它是运行期定位虚拟机性能问题的首选工具。
jstat命令格式为:
5.虚拟机性能监控与故障处理工具5.虚拟机性能监控与故障处理工具
  • option代表虚拟机信息, 主要分为3类: 类装载、 垃圾收集、 运行期编译状况;
5.虚拟机性能监控与故障处理工具5.虚拟机性能监控与故障处理工具
  • 参数interval和count代表查询间隔和次数, 如果省略这两个参数, 说明只查询一次。
示例1:每250毫秒查询一次进程2764垃圾收集状况, 一共查询20次:jstat -gc 2764 250 20
示例2:jstat -gcutil 2764
5.虚拟机性能监控与故障处理工具
结果分析:
服务器的新生代Eden区(E, 表示Eden) 使用了6.2%的空间,
两个Survivor区(S0、 S1,表示Survivor0、 Survivor1) 里面都是空的,
老年代(O, 表示Old) 和永久代(P, 表示Permanent) 分别使用41.42%和47.20%的空间;
程序运行以来共发生Minor GC(YGC, 表示Young GC) 16次, 总耗时0.105秒,
发生Full GC(FGC, Full GC) 3次, Full GC总耗时(FGCT, Full GC Time) 为0.472秒,
所有GC总耗时(GCT, 表示GC Time) 为0.577秒。
2.3.jinfo: Java配置信息工具
jinfo(Configuration Info for Java) 的作用是实时地查看和调整虚拟机各项参数。 使用jps命令的-v参数可以查看虚拟机启动时显式指定的参数列表, 但如果想知道未被显式指定的参数的系统默认值, 就只能使用jinfo的-flag选项进行查询。
使用-flag[+|-]name或者-flag name=value修改一部分运行期可写的虚拟机参数值。
jinfo命令格式:
5.虚拟机性能监控与故障处理工具
示例:查询CMSInitiatingOccupancyFraction参数值:jinfo -flag CMSInitiatingOccupancyFraction
2.4 jmap: Java内存映像工具
jmap(Memory Map for Java) 命令用于生成堆转储快照(一般称为heapdump或dump文件) 。
jmap的作用并不仅仅是为了获取dump文件, 它还可以查询finalize执行队列、 Java堆和永久代的详细信息, 如空间使用率、 当前用的是哪种收集器等。
jmap命令格式:
5.虚拟机性能监控与故障处理工具
5.虚拟机性能监控与故障处理工具
2.5 jhat: 虚拟机堆转储快照分析工具
jhat(JVM Heap Analysis Tool) 命令与jmap搭配使用, 来分析jmap生成的堆转储快照。 jhat内置了一个微型的HTTP/HTML服务器, 生成dump文件的分析结果后, 可以在浏览器中查看。
2.6 jstack: Java堆栈跟踪工具
jstack(Stack Trace for Java) 命令用于生成虚拟机当前时刻的线程快照(一般称为threaddump或者javacore文件) 。 线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合, 生成线程快照的主要目的是定位线程出现长时间停顿的原因, 如线程间死锁、 死循环、 请求外部资源导致的长时间等待等都是导致线程长时间停顿的常见原因。
jstack命令格式:
5.虚拟机性能监控与故障处理工具
5.虚拟机性能监控与故障处理工具
2.7 HSDIS: JIT生成代码反汇编
3. JDK的可视化工具
3.1 JConsole: Java监视与管理控制台
3.2 VisualVM: 多合一故障处理工具