虚拟机性能监控与故障处理工具
jdk的命令行工具
Sun JDK监控和故障处理工具
名称 |
作用 |
jps |
显示指定系统内所有的HotSpot虚拟机进程 |
jstat |
用于收集HotSpot虚拟机各方面的运行数据 |
jinfo |
显示虚拟机配置信息 |
jmap |
生成虚拟机的内存转储快照 |
jhat |
用于分析heapdump文件,它会建立一个HTTP/HTML服务器,让用户可以在浏览器上查看分析结果 |
jstack |
显示虚拟机的线程快照 |
jps:虚拟机进程状况工具
功能类似于ps,可以列出正在运行的而虚拟机进程,并显示虚拟机执行主类名称以及这些进程的本地虚拟机唯一ID。
jps命令格式
jps [ options ] [ hostid ]
jstat:虚拟机统计信息监视工具
用于监视虚拟机各种运行状态信息的命令行工具,可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据,是运行期间定位虚拟机性能问题的首选工具。
jstat命令格式
jstat [ option vmid [interval[s|ms] [count]] ]
例如:
jstat -gc 2764 250 20
//需要每250毫秒查询一次进程2764垃圾收集情况,一共查询20次
option代表着用户希望查询的虚拟机信息:类装载、垃圾收集、运行期编译状况
option 参数
选项 |
作用 |
-class |
监视类装载、卸载数量、总空间以及类装载所耗费的时间 |
-gc |
监视Java堆状况,包括eden区、两个survivor区、老年代、永久代等的容量,已用空间、gc时间合计 |
-gccapacity |
监视内容与-gc基本相同,但输出主要关注java堆各个区域使用到的最大,最小空间 |
-gcutil |
监视内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比 |
-gccause |
与-gcutile一样,但是会额外输出导致上一次GC产生的原因 |
-gcnew |
监视新生代GC状况 |
-gcnewcapacity |
监视内容与 -gcnew 基本相同,输出主要关注使用到的最大,最小空间 |
-gcold |
监视老年代GC状况 |
-gcoldcapacity |
监视内容与 -gcold 基本相同,输出主要关注使用到的最大、最小空间 |
-gcpermcapacity |
输出永久代使用到的最大、最小空间 |
-compiler |
输出JIT编译器编译过的方法,耗时等信息 |
-printcompilation |
输出已经被JIT编译的方法 |
jinfo:java配置信息工具
实时查看和调整虚拟机各项目参数。
命令格式
jinfo [ option ] pid
jmap:java内存映像工具
用于生成堆转储快照(一般称为heapdump或dump文件),查询finalize执行队列、Java堆和永久代的详细信息,如空间使用率、当前用的是哪种收集器等。
命令格式
jmap [ option ] vmid
option 选项的合法值与具体含义
选项 |
作用 |
-dump |
生成Java堆转储快照 |
-finalizerinfo |
显示在F-Queue中等待finalizer线程执行finalize方法的对象 |
-heap |
显示java堆详细信息,如使用哪种回收期、参数配置、分代状况等 |
-histo |
显示堆中对象统计信息,包括类、实时数量、合计容量 |
-permstat |
以ClassLoader为统计口径显示永久代内存状态 |
-F |
当虚拟机进程对-dump选项没有响应时,可使用这个选项强制生成dump快照 |
jhat:虚拟机堆转储快照分析工具
与jmap工具搭配使用,来分析jmap生成的堆转储快照。jhat内置了一个微型的HTTP/HTML服务器,生成dump文件的分析结果后,可以在浏览器中查看。
jstack:java堆栈跟踪工具
用于生成虚拟机当前时刻的线程快照(一般称为threaddump或者javacore文件)。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁,死循环,请求外部资源导致的长时间等待等都是导致线程长时间停顿的常见原因。
命令格式
jstack [ option ] vmid
option选项的合法值与具体含义
选项 |
作用 |
-F |
当正常输出的请求不被响应时,强制输出线程堆栈 |
-l |
除堆栈外,显示关于锁的附加信息 |
-m |
如果调用到本地方法的话,可以显示C/C++的堆栈 |
java.lang.Thread类新增了一个getAllStackTraces()的方法,可以使用这个方法写个管理员页面对服务器中的执行情况进行监控。
HSDIS:JIT生成代码反汇编
反汇编插件,调用它吧动态生成的本地代码还原为汇编代码输出,同时还生成了大量非常有价值的注释。
JDK可视化工具
JConsole:java监视与管理控制台
基于JMX的可视化监视、管理工具
1、启动JConsole
通过JDK/bin目录下的jconsole.exe启动JConsole后,将自动搜索出本机运行的所有虚拟机进程。双击选择一个进程即可开始监控,也可以使用下面的远程进程功能来连接远程服务器,对远程虚拟机进行监控。2、内存监控
内存页签相当于可视化的jstat命令,用于监视受收集器管理的虚拟机内存(java堆和永久代)的变化趋势
3、线程监控
线程页签相当于可视化的jstack命令,遇到线程停顿时可以使用这个页签进行监控分析。
线程长时间停顿的主要原因有:等待外部资源(数据库连接、网络资源、设备资源等)、死循环、锁等待(活锁和死锁)。
VisualVM:多合一故障处理工具
1、VisualVM兼容范围与插件安装
首次打开VisualVM与操作系统相似,需要安装插件才能达到使用的精华,插件可前往相关网站下载*.nbm包。然后进行安装。在有网络连接的环境下,可以点击“工具->插件菜单”,就会弹出来一个插件页签,里面列举了当前版本的VisualVM可用的插件。
安装完插件就可以选择一个监视的程序进入程序的主界面了。
2、生成、浏览堆转储快照
生成dump文件的方式:
1、在应用程序窗口中右键单击应用程序节点,然后选择堆dump
2、在应用程序窗口中双击应用程序节点以打开应用程序标签,然后在监视标签中单击堆dump
3、分析程序性能
在profiler页签中使用该功能,可以用于调试代码的时间复杂度和空间复杂度
4、BTrace动态日志跟踪
在不停止目标程序运行的前提下,动态加入原本不存在的调式代码