[JDK工具]虚拟机性能监控与故障处理工具

1. 前言

不会程序调优的程序员不是一个好程序员。

给一个系统定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。这里说的数据包括:运行日志、异常堆栈、GC日志、线程快照(threaddump/javacore文件)、堆转储快照(heapdump/hprof文件)等。

2. JDK的命令行工具

我们熟知的JDK的bin目录中有“java”、“javac”命令。
除此之外,还有一些工具,对于我们坚实虚拟机和故障处理非常有用,如下表:
在这里插入图片描述

2.1 javap:分析java汇编指令

通过javap命令可以查看一个java类反汇编、常量池、变量表、指令代码行号表等等信息。
一般常用的是-v -l -c三个选项。
javap -v classxx,不仅会输出行号、本地变量表信息、反编译汇编代码,还会输出当前类用到的常量池等信息。
javap -l 会输出行号和本地变量表信息。
javap -c 会对当前class字节码进行反编译生成汇编代码。

2.2 jps:虚拟机进程状况工具

常用:
jps -l
jps -l -v

命令格式:jps [options] [hostid]
Option参数:

-l : 输出主类全名或jar路径
-q : 只输出LVMID
-m : 输出JVM启动时传递给main()的参数
-v : 输出JVM启动时显示指定的JVM参数	

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

是用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。
常用命令:jstat -gc 1262jstat -class 11589jstat -compiler 1262jstat -gccapacity 1262

2.4 jinfo:Java配置信息工具

实时查看和调整虚拟机运行参数。
之前的jps -v只能查看到显示指定的参数,如果想要查看未被显示指定的参数的值就要使用jinfo口令。
命令:jinfo 3796

2.5 jmap:Java内存映像工具

命令用于生成堆转储快照(一般称为heapdump 或者dump文件),如果不使用这个命令,还可以使用
-XX:+HeapDumpOnOutOfMemoryError参数来让虚拟机出现OOM的时候·自动生成dump文件。
jmap不仅能生成dump文件,还可以查询finalize执行队列、Java堆和永久代的详细信息,如当前使用率、当前使用的是哪种收集器等。
常用:jmap -dump:format=b,file=eclipse.bin 3500

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

jhat命令与jmap搭配使用,来分析jmap生成的堆转储快照。
常用:jhat eclipse.bin

2.7 jstack:Java堆栈跟踪工具

jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。 线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源。 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另外,jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的。

常用命令:jstack -l 3500

2.8 HSDIS:JIT生成代码反汇编

一般分析程序如何执行,通过软件调试工具(GDB、Windbg等)来断点调试是最常见的手段,但是这样的调试方式在Java虚拟机中会遇到很大的困难,因为大量执行代码是通过JIT编译器动态生成到CodeBuffer中的,没有很简单的手段来处理这种混合模式的调试。
基于这种背景,就有了HSDIS插件

3. JDK的可视化工具

3.1 JConsole:Java监视与管理控制台

3.2 VisualVM:多合一故障处理工具

4.参考

基于JDK命令行工具的监控
JVM笔记8-虚拟机性能监控与故障处理工具

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值