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

192 阅读4分钟

基础故障处理工具

jps:虚拟机进程状态工具

可以列出正在运行的虚拟机进程,并显示虚拟机执行主类名称以及进程ID。

常用命令:

  1. jps -l 输出主类的全名,如果执行的是jar包,则输出jar包的路径

    示例:jps -l 进程ID jar包名称

    4803 project-manager-1.2.0.jar 12199 invoice-center-1.2.0.jar

  2. jps -v 输出虚拟机进程启动时的JVM参数

    示例:jps -lv 进程ID jar包名称 JVM参数

    4803 project-manager-1.2.0.jar -Xms256M -Xmx1G 12199 invoice-center-1.2.0.jar -Xms256m -Xmx1g

  3. jps -m 输出虚拟机进程启动时传递给主类main()方法的参数

    示例:jps -lvm 进程ID jar包名称 main方法参数 JVM参数

    9788 main-1.0.12.jar --spring.profiles.active=uat -Xms512m -Xmx512m 32670 eureka-server.jar --spring.profiles.active=uat -Xms64m -Xmx128m

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

jstat是用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中类加载、内存、垃圾收集、即使编译等运行时数据。

常用命令:

  1. jstat -gcutil xxx(进程ID)

    示例:

    jstat -gcutil 32670 S0 S1 E O M CCS YGC YGCT FGC FGCT GCT 0.00 53.60 60.84 66.02 95.38 92.95 8909 42.751 5 0.723 43.475

S0表示survivor0区的内存占用大小情况、S1表示survivor1区的占用内存大小情况

E表示Eden区的使用情况、O表示老年代的使用情况、M表示元空间的使用情况

YGC表示程序运行以来minor GC发生的次数、YGCT表示minor GC的总耗时

FGC表示程序运行以来full GC发生的次数、FGCT表示full GC的总耗、GCT表示所有垃圾收集的总耗时

jinfo:Java配置信息工具

jinfo的作用是实时查看和调整虚拟机各项参数。

常用命令:jinfo -flag CMSInitiatingOccupancyFraction 32670

jmap:Java内存映像工具

jmap命令用于生成堆转储快照。

常用命令:jmap -dump:format=b,file=eclipse.bin xxx(pid)

说明:生成一个正在运行的eclipse的堆转储快照文件,这个文件可以用一些可视化工具进行分析。

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

JDK提供jhat命令与jmap搭配使用,来分析jmap生成的堆转储快照。该命令只用在服务器生分析堆转储快照,实际生产活动中~~不推荐这个命令进行分析堆转储文件~~。

jstack:Java堆栈跟踪工具

jstack命令用于生成虚拟机当前时刻的线程快照。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的目的通常是定位线程出现长时间停顿,如线程间死锁、死循环、请求外部资源挂起等导致需要较长时间才能相应的情况

常用命令: jstack -l xxx(pid)

可视化故障处理工具

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

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

JConsole:Java监视于管理控制台

JConsole是一款基于JMX的可视化监控、管理工具。它的主要功能是通过JMX的MBean对系统进行信息收集和参数动态调整。

启动:通过JDK/bin目录下的jconsole.exe启动,或者通过命令行工具输入jconsole进行启动

主要功能:

  1. 内存监控:“内存”页签的作用相当于可视化的jstat命令,用于监控被收集器管理的虚拟机内存的变化趋势。
  2. 线程监控:“线程”页签的作用相当于可以是的jstack命令,线程停顿的时候可以使用这个页签的功能进行分析。

VisualVM:多合一故障处理工具

VisualVM是功能最强大的运行监视和故障处理程序之一,除了常规的运行监视、故障处理外,还提供其他方面的能力,譬如性能分析。它还有一个很大的优点,就是不需要被监视的程序基于特殊的Agent去运行,因为它的通用性很强,对应用程序实际性能的影响也比较小,可以直接应用在生产环境中。

\