常用JVM工具
1:jps(JVM Process Status Tools)
可以列举正在运行的虚拟机进行并显示虚拟机执行的主类以及这些进行唯一ID。
命令:jps [选项] [hostid]
选项参数:
-q:只输出LVMID;
-m:输出JVM启动时传给主类的方法
-l:输出主类的全名,如果是jar就输出jar的全路径
-v:输出JVM的启动参数
2:jstat(JVM Statistic Monitoring Tools)
主要是用于监控虚拟机的各种运行状态信息,如类的装载、内存、垃圾回收、JIT编译器等。
在没有GUI工具的服务器上,这款工具是首选的一款监控工具。
命令格式:jstat [option vmid [interval [slms[count]]]]
如果是本地虚拟机进程,VMID与LVMID是一致的。
参数interval:表示查询间隔
参数count:表示查询次数
jstat gc 2764 250 20:250毫秒查询2764垃圾收集情况,一共查询20次。
选项参数:
-class:监视类加载、卸载数量、总空间以及类装载所耗费的时间。、
-gc:监视Java堆状况
-gccapacity:输出主要关注Java堆各个区域使用到的最大、最小空间
-gcutil:输出主要关注已使用空间占总空间的百分比
-gccacuse:会额外输出导致上一次GC所产生的原因
-gcnew:监视新生代GC状况。
3:jinfo(Configuration Info for Java)Java配置信息工具
实时查看和调整虚拟机的各项参数
命令格式:jinfo [option] pid
-flag<name>:打印指定的VM参数的值
-flag[+-]<name>:启用或禁用指定虚拟机参数
-flag<name>=<value>:修改指定虚拟机参数的值
4:Jmap(Memory map fot Java)Java内存映射工具
Jmap用于生成堆转储快照(hcapdump文件或dump文件)
命令格式:jmap [option] vmid
-dump:生成Java堆转储快照,格式:-dump:[live,]format=b,file{filename}
-histo:显示堆中对象统计信息,包括类、实例变量、合计容量
-heap:显示Java堆详细信息,如使用的什么垃圾收集器、参数配置、分代状况等
-finalizerInfo:显示在F-Queue下等待finalizer线程执行finalize方法的对象
-premstat:以ClassLoader为统计口径显示永久代的内存状态
-F:当虚拟机对-dump无响应的时候,可以使用这个选项强制生成dump快照
其余三种生成dump文件的方法:
第一种:使用-XX:+HeapDumpOutOfMermoryError参数,可以让虚拟机在OOM异常出现后自动生成dump文件。
第二种:通过-XX:HeapDumpOnCtrlBreak参数,可以使用Ctrl+Break键让虚拟机生成dump文件
第三种:在Linux系统下,使用kill -3 命令吓唬虚拟机,也可以拿到dump文件。
5:jhat(JVM Heap Analysis Tool)虚拟机堆转储文件分析工具
Jmap是生成堆转储文件,jhat是分析堆转储文件,两者搭配使用。
Jhat是用于分析dump文件的一个微型HTTP/HTML服务器,它能够将dump文件生成在线HTML文件,让我们可以通过浏览器进行查阅。
命令格式:jhat {dump_file}
缺点:1、耗时并且消耗硬件资源;2:jhat分析功能简陋
6:jstack(Java Stack Trace for Java)Java堆栈跟踪工具
Jstack用于JVM当前时刻的线程快照,又称为threaddump文件,它是JVM当前每一条线程正在执行的堆栈信息的集合。
生成线程快照的主要目的是为了定位线程出现长时间停顿的原因,如线程死锁、死循环、请求外部时长导致线程停顿的原因;
命令格式:jstack [option] vmid
-F:当正常输出的请求不响应的时候,强制输出线程堆栈;
-l:除了堆栈信息外,显示关于锁的附加信息
-m:显示native方法的堆栈信息
7:HSDIS JIT生成代码反汇编
Sun官方推荐的HotSpot虚拟机JIT编译代码的反汇编插件,它包含在HotSpot虚拟机的源码之中,但是没有提供编译后的程序
8:JConsole(JVM Monitoring and management console)Java监视与管理控制台
基于JMX的可视化监控、管理工具
9:Visual VM 多合一故障处理工具
目前为止随JDK发布的功能最强大的运行监控和故障处理程序,并且可以预见在未来一段时间内都是主力发展的虚拟机故障处理工具。
是基于NetBeans平台研发。
Visual VM可以做到什么:
1- 显示虚拟机进程以及进程的配置、环境信息(jps、jinfo)
2- 监视应用程序的CPU、GC、堆、方法区以及线程的信息。(jstat、jstack)
3- Dump以及分析堆转储文件;(jmap、jhat)
4- 方法级的程序运行性能分析,找出被调用最多,运行时间最长的方法
5- 离线程序快照,收集程序的运行时配置,线程dump、内存dump等信息建立一个快照,可以将快照发送开发者进行bug反馈。