深入理解Java虚拟机:JVM高级特性与最佳实践 第2版 高清PDF+源码 下载
一,常用JDK监控和故障处理工具 命令名称全称用途jstat JVM Statistics Monitoring Tool 用于收集Hotspot虚拟机各方面的运行数据
jps JVM Process Status Tool 显示指定系统内所有的HotSpot虚拟机进程
jinfo Configuration Info for Java 显示虚拟机配置信息
jmap JVM Memory Map 生成虚拟机的内存转储快照,生成heapdump文件
jhat JVM Heap Dump Browser 用于分析heapdump文件,它会建立一个HTTP/HTML服务器,让用户在浏览器上查看分析结果
jstack JVM Stack Trace 显示虚拟机的线程快照
二,命令使用详解
1, jstat:查看虚拟机各云心状态信息
jstat命令可用于显示本地或远程虚拟机进程中的类装载 ,内存,垃圾收集,JIT编译等运行数据。
jstat命令的格式为:
其中若查询的是本地虚拟机进程,VMID与LVMID是一致的,如果是远程虚拟机进程VMID的格式为:
[protocol:][//] lvmind[@hostname [:port] /servername]
可用 jstat -options来查询jstat可以搭配哪些操作选项:
options有:
-class监视类装载,卸载数量,总空间以及类装载所耗费的时间
-gc 监视Java堆状况,包括Eden区,两个survivor区,老年代,永久代的容量,已用空间,GC时间合计等信息
-gccapacity内容与-gc基本相同,但主要输出Java堆各个区域的最大最小空间
-gcutil内容与-gc基本相同,但主要关注已使用空间占总空间的百分比
-gccause内容与-gcutil基本相同,但主要关注已使用空间占总空间的百分比,并输出导致上一次GC的原因
-gcnew监视新生代GC情况
-gcnewcapacity内容与-gcnew基本相同,但主要输出使用到的最大最小空间
-gcold监视老年代GC情况
-gcoldcapacity内容与-gcnew基本相同,但主要输出使用到的最大最小空间
-gcpermcapacity输出永久代使用到的最大最小空间
-complier输出JIT 编译器编译过的方法耗时的信息
-printcompliter输出已经被JIT编译的方法
例如:
其中S0,S1表示Surviver区,E表示新生代Eden区,O表示老年代,YGC表示Young GC,其下面的数字表示GC了多少次,YGCT表示Young GC的耗时,单位为秒,FGC表示Full GC,FGCT表示Full GC的耗时,单位为秒,GCT表示总共的GC时间,为YGCT与FGCT的总和。
2, jps:产看虚拟机进程信息
jps命令可用于查询正在运行的虚拟机进程,同时可选择性的显示虚拟机执行主类,即执行main函数的类,以及进程的本地虚拟机ID(Local Virtual Machine Identifier 简称LVMID)(对于本地虚拟机进程来说,进程的本地虚拟机ID与操作系统的进程ID是一致的)
jps的命令格式为:
options 有:
-q 只输出本地虚拟机进程ID,省略主类名
-m输出虚拟机进程启动时传递给main()函数的参数
-l输出进程执行的主类的全名
-v输出虚拟机进程启动时的JVM参数
hostid可用于查询开启了RMI服务的远程虚拟机进程状态,hostid为RMI注册表中注册的主机名
3, jinfo:查看虚拟机配置参数信息
jinfo用于查看和调整虚拟机的配置参数.
jinfo的命令格式为:
我们可以用jinfo -flags来查询线程的参数,其中的Non-default VM flags为虚拟机默认的设置参数,Command line为用户自行设置的参数,如下图:
4, jmap:生成虚拟机内存转储快照
jmap命令用于获取heapdump文件,且可以查询finalize执行队列,Java堆与永久代的一些信息。
jmap的命令格式为:
常用的option选项有:
-dump 生成Java堆转储快照,格式为: -dump:[live , ]format=b , file=,其中live子参数 说明只dump出存活的对象
-finalizerinfo 显示在F-Queue中等待Finalizer线程执行finalize方法的对象
-heap 显示Java堆详细信息,如使用哪种回收器,参数配置,分代状况等
例如:
5, jhat:分析虚拟机转储快照信息