数据包括:运行日志,异常堆栈,GC日志,线程快照(threaddump/javacore文件),堆转储快照(heapdump/hprof文件)等.
-Dcom.sun.management.jmxremote 开启JMX管理功能(JDK1.6以上默认开启)
jps
JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程,它是使用频率最高的JDK命令行工具,因为其他的JDK工具需要输入它查询到LVMID来确定要监控的是哪一个虚拟机进程
常用选项:
-q 只输出LVMID(本地虚拟机唯一ID),省略主类的名称
-m 输出虚拟机进程启动时传递给主类main()函数的参数
-l 输出主类的全名,如果进程执行的是Jar包,输出Jar路径
-v 输出虚拟机进程启动时JVM参数
jstat
JVM Statistics Monitoring Tool ,用于收集HotSpot虚拟机各方面的运行数据,它是运行期定位虚拟机问题的首选工具
exam:每250毫秒查询一次进程2764垃圾收集状况,一共查询20次 -> jstat -gc 2764 250 20
选项option代表用户希望查询的虚拟机信息,主要分为3类:类装载,垃圾收集,运行期编译状况
主要选项
-class 监视类装载,卸载数量,总空间以及类装载所耗费的时间
-gc 监视Java堆状况,包括Eden区,两个Survivor区,老年代,永久代等的容量,已用空间,GC时间合计等信息
-gccapacity 监视内容与-gc基本相同,但输出主要关注java堆各个区域使用到的最大,最小空间
-gcutil 监视内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比
-gccause 与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因
-gcnew 监视新生代GC状况
-gcnewcapacity 监视内容与-gcnew基本相同,输出主要关注使用到的最大,最小空间
-gcold 监视老年代GC状况
-gcoldcapacity 监视内容与-gcold基本相同,输出主要关注使用到的最大,最小空间
-gcpermcapacity 输出永久代使用到的最大,最小空间
-compiler 输出JIT编译器编译过的方法,耗时等信息
-printcompilation 输出已经被JIT编译过的方法
jinfo
Configuration Info for Java显示虚拟机配置信息
exam: jinfo -flag CMSInitiatingOccupancyFraction 53739
jmap
Memory Map for Java,生成虚拟机的内存转储快照(heapdump文件)
作用不仅仅是为了获取dump文件,还可以查询finalize执行队列,java堆和永久代的详细信息,如空间使用率,当前用的是哪种收集器等.
主要选项
-dump 生成java堆转储快照.格式为-dump:[live,]format=b,file=<filename>.其中live子参数是否只dump出存活对象
-finalizerinfo 显示在F-Queue中等待Finalize线程执行finalize方法的对象.只在Linux/Solaris平台有效
-heap 显示java堆详细信息,如使用哪种回收器,参数配置,分代状况等.只在Linux/Solaris平台有效
-histo 显示堆中对象统计信息,包括类,实例数量,合计容量
-permstat 以ClassLoader为统计口径显示永久代内存状态.只在Linux/Solaris平台有效
-F 当虚拟机进程对-dump选项没有响应时,可使用这个选项强制生成dump快照.只在Linux/Solaris平台有效
exam: jmap -dump:format=b,file=idea.bin 53739
jhat
JVM Heap Dump Browser,用于分析heapdump文件,他会建立一个HTTP/HTML服务器,让用户可以在浏览器上查看分析结果
缺点->jhat分析功能比较简陋,实际工作中基本不用
jstack
Stack Trace for Java,用于生成虚拟机当前时刻的线程快照(一般称为threaddump或javacore文件),线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合.生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁,死循环,请求外部资源导致的长时间等待等都是导致线程长时间停顿的常见原因.
主要选项:
-F 当正常的输出不被响应时,强制输出线程堆栈
-l 除堆栈外,显示关于锁的附加信息
-m 如果调用到本地方法的话,可以显示C/C++的堆栈
在JDK1.5中,java.lang.Thread类新增了一个getAllStackTraces()方法用于获取虚拟机中所有线程的StackTraceElement对象.使用这个方法,可以通过简单的几行代码就完成jstack的大部分功能.实际项目中,可以调用该方法做管理员页面
jConsole:
Java监视与管理控制台,是一种基于JMX的可视化监视管理工具
管理功能:针对JMX MBean进行管理,可通过所有符合JMX规范的软件进行访问MBean
监视功能:
VisualVM:
多合一故障处理,是目前JDK发布的功能最强大的运行监视和故障处理程序,除了运行监视和故障处理外,还提供了许多其他功能,如性能分析,还有个有点,不需要被监视的程序基于特殊Agent运行,对应用程序性能影响很小,可以直接应用在生产环境中.
可以做到:
1.显示虚拟机进程以及进程的配置,环境信息(jps,jinfo)
2.监视应用程序的CPU,GC,堆,方法区以及线程的信息(jstat,jstack)
3.dump以及分析堆转储快照(jmap,jhat)
4.方法级的程序运行性能分析,找出被调用最多,运行时间最长的方法
5.离线程序快照:收集程序的运行时配置,线程dump,内存dump等信息建立一个快照,可以将快照发送至开发者处进行Bug反馈等等