【JVM】总结(三)——虚拟机性能监控与故障处理工具
一、JDK的命令行工具:
- jps:JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程。
- jstat:JVM Statistics Monitoring Tool,用于收集HotSpot虚拟机各方面的运行数据。
- jinfo:Configuration Info for Java,显示虚拟机配置信息。
- jmap:Memory Map for Java,生成虚拟机的内存转储快照。
- jhat:JVM Heap Dump Browser,用于分析heapdump文件,它会建立一个HTTP/HTML服务器,让用户可以在浏览器上查看分析结果。
- jstack:Stack Trace for Java,显示虚拟机的线程快照。
下面详细介绍:
1、jps:虚拟机进程状况工具
功能和ps命令类似:可以列出正在运行的虚拟机进程,显示虚拟机执行主类名称以及这些进程的本地虚拟机唯一ID。使用频率最高。
jsp命令格式:jps [options] [hostid]
例如:jsp -l //输出主类全名,包括进程ID和进程名称
2、jstat:虚拟机统计信息监视工具
用于监视虚拟机各种运行状态信息的命令行工具,可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。是没有图形界面的服务器运行期定位虚拟机性能问题的首选工具。
jstat命令格式:jstat [option vmid [interval[s|ms]] [count]]
例如:jstat -gc 2764 250 20 //每250毫秒查询一次2764的垃圾收集情况,一共查询20次
3、jinfo:Java配置信息工具
jinfo的作用是实时地查看和调整虚拟机各项参数。
jinfo命令格式:jinfo [option] pid
例如:jinfo -flag CMSInitiatingOccupancyFraction 1444 //查询CMSInitiatingOccupancyFraction参数值
jinfo -flag 参数名 pid:可以查看指定参数的值
jinfo -sysprops pid:查看系统参数
jinfo -flag [+|-] pid:修改部分参数值
4、jmap:内存映像工具
jmap命令用于生成堆转储快照(一般称为heapdump或dump文件),还可以查询finalize执行队列、java堆和永久代的详细信息,如空间使用率、当前用的是哪种收集器等。
jmap命令格式:imap [option] vmid
例如:jmap -dump:format=b,file=eclipse.bin 3500 //生成一个dump快照文件
5、jhat:虚拟机堆转储快照分析工具
jhat命令与jmap命令搭配使用,分析jmap生成的堆转储快照。jhat内置了一个微型HTTP/HTML服务器,生成dump文件的分析结果后可以在浏览器中查看。在实际工作中,除非没有其他工具否则一般不会使用这个工具。
例如:jhat eclipse.bin
6、jstack:Java堆栈跟踪工具
jstack命令用于生成虚拟机当前时刻的线程快照。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合。生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程死锁、死循环、请求外部资源导致的长时间等待等等。
jstack命令格式:jstack [option] vmid
例如:jstack -l 3500
7、HSDIS:JIT生成代码反汇编
作用是让HotSpot的-XX:+PrintAssembly指令调用它来把动态生成的本地代码还原为汇编代码输出。
二、JDK可视化工具
两个功能强大的可视化工具:JConsole和VisualVM。
1、JConsole:Java监视与管理控制台
JConsole是一种基于JMX的可视化监视、管理工具。它管理部分的功能是针对JMX MBean进行管理。通过JDK/bin目录下的“jconsole.exe”启动JConsole后,将自动搜索出本机运行的所有虚拟机进程。
2、VisualVM:多合一故障处理工具
VisualVM是目前为止随JDK发布的功能最强大的运行监视和故障处理程序,主流使用。除了具备运行监视、故障处理功能外还提供了性能分析。VisualVM一个很大的优点是:不需要被监视的程序基于特殊Agent运行,因此它对应用程序的实际性能的影响很小,可以直接用于生产环境中。
在cmd中输入jvisualvm
命令,即可启动程序。