虚拟机性能监控和故障处理工具

目录

虚拟机性能监控、故障处理

一、虚拟机相关命令

1、jps:虚拟机进程状况工具

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

3、jinfo:Java配置信息工具

4、jmap:Java内存映像工具

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

6、jstack:Java堆栈跟踪工具

二、可视化故障处理工具

1、JConsole:Java监控与管理控制台

2、VisualVM:故障处理集合工具


虚拟机性能监控、故障处理

 

一、虚拟机相关命令

1、jps:虚拟机进程状况工具

功能与Linux中的ps命令相似,可用列出正在运行的虚拟机进程,以及进程的唯一ID
命令格式:jps [options] [hostid]

示例:


 

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

是用于监视虚拟机各个运行状态信息的命令工具。展示Java进程中的类加载、内存、垃圾收集、即时编译等运行时数据。
命令格式:
jstat [option pid [interval[s|ms]] [count]] 
jstat [-命令选项] [pid] [间隔时间/毫秒] [查询次数]

常用选项:
-class: 监视类加载、卸载数量、总空间以及类装载所耗费时间
-gc: 监视Java堆情况,包括Eden区,2个Survivor区,老年代,永久代等容量,已用空间,垃圾收集时间合计等
-gcutil: 监视内容与-gc基本相同,单输出主要是关注Java堆各个区域使用的最大最小空间

参数详解:
S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
S0U :年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
S1U :年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
EC :年轻代中Eden(伊甸园)的容量 (字节)
EU :年轻代中Eden(伊甸园)目前已使用空间 (字节)
OC :Old代的容量 (字节)
OU :Old代目前已使用空间 (字节)
MC:metaspace(元空间)的容量 (字节)
MU:metaspace(元空间)目前已使用空间 (字节)
YGC :从应用程序启动到采样时年轻代中gc次数
YGCT :从应用程序启动到采样时年轻代中gc所用时间(s)
FGC :从应用程序启动到采样时old代(全gc)gc次数
FGCT :从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT:从应用程序启动到采样时gc用的总时间(s)

示例:

打印进程id是6132的相关信息,每1000ms打印一次,打印10次。

3、jinfo:Java配置信息工具

是实时查看和调用虚拟机各项参数。
命令格式:
jinfo [option] pid

示例:

我在JpsTest程序添加了-XX:CMSInitiatingOccupancyFraction=85 启动参数

4、jmap:Java内存映像工具

用于生成堆转储快照(dump文件)。如果不用jmap命令,也可以通过-XX:+HeapDumpOnOutMemoryError参数来让虚拟机在内存溢出异常出现后自动生成堆转储快照文件。
命令格式:jmap [option] pid

常用选项:
-dump:生成Java堆转储快照。格式为 -dump:[live,]format=b,file=<filename>,其中live子参数说明是否只dump出存活的对象。例:jmap -dump:format=b,file=dumpFile.bin <pid>
-heap:显示Java堆详细信息。注:只在linux、Solaris平台下有效。
-histo:显示堆中对象统计信息,包括类、实例数量、合计容量

示例:

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

与jamp搭配使用,是用来分析jmap生成的堆转储快照。jhat内置了一个小型的服务器,生成堆转储快照的分析结果后,可以直接在浏览器中查看。
命令格式:jhat <filename>
屏幕显示"Server is ready."后在浏览器中输入,http://localhost:7000/ 即可看到分析结果。
注:有一说一,这个结果看着也不是很直观。我平时用的比较偏多的还是jamp中的-histo,看着比较直观一些。

示例:

6、jstack:Java堆栈跟踪工具

用于生成当前Java进程当前时刻的线程快照。线程快照就是当前虚拟机内所有线程正在执行的方法堆栈的集合。经常用来排查线程死锁,死循环,线程长时间阻塞等问题。
命令格式:
jstack [option] pid

常用选项:
-l:除堆栈信息外,还会显示关于锁的附加信息。也可以输出到相应文件,例:jstack -l <pid> > stack.log
-F:当正常输出请求没有反映时,该选项可以强制输出线程堆栈信息。

由于我linux服务器上没有运行Java程序,所以示例都是在window上的。
除了上面介绍的几种,还有很多其他的工具。
如:jar(创建和管理jar文件),java(Java运行工具),javac(Java编译器),javap(字节码分析工具)等等。
感兴趣的小伙伴可以深入了解一波,顺便给我也分享一波。

示例:

stack.log文件中,相关线程信息也有打印

 

二、可视化故障处理工具

1、JConsole:Java监控与管理控制台

是基于JMX的可视化监控、管理工具。主要功能是通过JMX的MBean对系统进行信息收集和参数动态调整。
该工具在我们安装jdk的bin目录下,可以看到有个jconsole.exe文件。
打开该工具,当我们有Java程序运行时,他会自动检测到本机的Java进程,然后我们选择相应的进程,就可以进入可视化的界面查看相应信息。
主要有内存、线程、类加载数、VM概要、MBean几大块信息。有兴趣可以自己在电脑上运行一个Java程序,然后自己点一点,看一看。
内存监控:相当于将我们之前介绍的jstat命令给可视化了。用于监视被收集器管理的虚拟机内存的变化趋势。
线程监控:相当于将我们之前介绍的jstack命令给可视化了。用于监测Java进程线程运行情况。还很贴心的有个专门检测死锁的按钮哦。

2、VisualVM:故障处理集合工具

是一个功能强大的运行监视和故障处理程序之一。除了常规的运行监视、故障处理外,还有着性能分析等工具。
功能:
 1)显示Java进程以及进程的相关配置环境信息,相当于jps,jinfo。
 2)监视应用程序的处理器,垃圾收集,堆,线程等信息,相当于jstas,jstack
 3)dump以及分析堆转储快照,相当于jmap,jhat
 4)程序运行性能的分析
 5)可以安装插件,可以扩展更多功能


 离线官方插件地址:https://visualvm.github.io/pluginscenters.html
 在线java visualvm安装插件。如图:

在Profiler页中,可以查看运行期间方法级的处理器执行时间分析以及内存分析。

Btrace动态日志跟踪,这是一个VisualVM的插件,功能很强大。可以在不中断目标程序运行的情况下,通过HotSpot虚拟机允许在不停机的情况下跟新加载类的代码功能,动态加入原本不存在的调试代码。
当程序出现异常问题时,可以通过该插件,来增加一些调试的日志代码,而且不同停掉服务。

JMC(Java Mission Control):可持续在线监控工具

用来远程监控和管理JVM虚拟机的。
需要在远程端的服务进程启动时添加如下参数即可远程:
-Dcom.sun.management.jmxremote.port=9999 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false 
-Djava.rmi.server.hostname=192.168.31.31

-XX:+UnlockCommercialFeatures -XX:+FlightRecorder

然后在VisualVM工具中,选择"文件"->"添加远程主机",填上我们配置的地址和端口接口连接上。后续的操作于本地一致。

 

在我们平时的开发过程中,Linux服务器使用的较多,因此相对于可视化的界面,我个人认为相关的虚拟机命令使用的要更多一些。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值