点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!
前 言
JDK是一个功能非常强大的Java开发套装,不仅给我们提供了Java运行环境,还给开发人员提供了许多有用的开发组件(位于bin目录中,如下图所示),对于我们运维人员来说,在我们出现一些内存,GC,线程等问题,JVM分析工具能够很好的帮助我们定位分析问题,我们可以利用jdk自带的jvm分析工具进行分析,比如jps,jinfo,jvisualvm,jconsole,jstat,jstack,jcmd,jmap等。当然也可以采用很多优秀的开源jvm分析工具进行分析,Arthas等。

常见自带的JVM分析工具
工具 | 类型 | 作用 |
jps | 命令行 | jvm进程状态工具,列出系统上jvm进程的pid |
jinfo | 命令行 | jvm信息查看工具,查看jvm的各种配置信息 |
jvisualvm | 图形界面 | jvm综合监控工具,查看jvm基本信息,堆,栈,转储,内存,cpu以及gc等信息 |
jconsole | 图形界面 | jmx兼容的图形工具,用于监控jvm基本情况,查看MBean |
jstat | 命令行 | jvm统计监控工具,附件到一个jvm进程上手机和记录jvm的各种性能指标数据 |
jstack | 命令行 | jvm栈查看工具,可以查看jvm进程的线程和锁信息 |
jcmd | 命令行 | jvm命令行调试工具,用于向jvm进程发送调试命令 |
jmap | 命令行 | jvm堆内存分析工具,可以查看jvm进程对象直方图,类加载统计以及做堆转储操作 |
JVM分析工具详解
1. jps
通过jps查看Java进程列表pid。如图所示能看到ASMain的pid为2977。

2. Jinfo
通过Java进程对应的pid,使用jinfo查看jvm各种配置信息。比如jdk版本,环境,路径,虚拟机名称,编码,堆栈等信息。

3. jvisualvm
jvisualvm是一个综合监控工具,查看jvm基本信息,堆,栈,转储,内存,cpu以及gc等信息。
概述:可以看到堆栈信息以及系统参数等。
监视:CPU(使用情况,垃圾回收情况),内存(堆大小,堆使用大小),类(类装入卸载数量),线程(活动线程,守护线程数量)。
线程:当前所有线程执行状态,主要包括开启了那些线程,线程运行,休眠,等待,驻留,监视等信息。
抽样器:CPU抽样(CPU样例与线程CPU时间)与内存抽样(堆柱状图与每个线程分配)。,
Profiler:CPU与内存性能分析。

4. jstat
jstat工具以命令行的方式,允许以固定的监控频次输出 JVM 的各种监控指标,比如使用 -gcutil 输出 GC 和内存占用汇总信息,每隔 5 秒输出一次,输出 100 次.

5. jstack
通过命令行工具 jstack,也可以实现抓取线程栈的操作,进行在线分析,一般情况我们会连续抓取三次,每隔五秒。

6. jmap
jmap jvm自带命令行工具,可用于了解系统运行时的对象分布。
jmap pid 查看基本信息。
查看堆信息,jmap -heap pid。
jmap -histo pid 查看一些class的使用情况。
jmap -histo:live pid >dump.txt 输出class信息到dump文件。



本文作者:程 红(上海新炬王翦团队)
本文来源:“IT那活儿”公众号





