9.性能优化-监控-JVM监控工具

1.JConsole 
JConsole随Java 5和更高版本分发,位于%JAVA_HOME%/bin目录下。
可以用来监控堆使用,类加载、CPU使用以及线程情况,如下图所示:

9.性能优化-监控-JVM监控工具_第1张图片

个人感觉除了线程tab页,点击线程可以看到执行的线程堆栈,以及可以通过[检测到死锁]按钮方便的查看死锁的线程外,其余功能可以被jvisualvm替代。
2.JVisualVM
JVisualVM从Java 6 Update 7引入,虽然JVisualVM运行需要依赖Java 6,但是它同样可以监控运行在java 1.4和java 5中的应用。JVisualVM被视为第2代JConsole。
常用功能:
1)创建线程转储
2)创建内存转储
3)提供了CPU和内存性能分析功能,但不如NetBeans Profiler强大,NetBeans Profiler可以监视热点方法占用CPU百分比还记录了方法调用次数,内存监视则比JVisualVM多记录了对象年龄,另外还可以查看调用堆栈。


9.性能优化-监控-JVM监控工具_第2张图片



3. VisualGC
本章着重介绍一下VisualGC。
VisualGC是JVisualVM的插件。
在JVisualVM中选择"工具"->"插件",在"可用插件"tab页中,选中visualgc,然后点击安装,下载完毕后重启JVisualVM,如果看到下图的visualgc tab页则说明安装成功。

9.性能优化-监控-JVM监控工具_第3张图片

1)Spaces区域。
这些垃圾收集区域与JVM给他们分配的最大值成比例,深色区域是永久代的当前使用量,灰色则代表最大值,另外未分配内存为浅灰,已分配内存为深灰。上图中由于给-Xms和-Xmx设置了相同的值来避免内存频发扩充,所以上图中看不到浅灰区域。
Perm:永久代情况。
Old:老年代情况。
Eden:新生代Eden区域。
S0和S1:新生代两个Survivor区域。
2)Graphs区域。
Compile Time(编译时间):487 compiles 表示编译总数,4.277s表示编译累计时间。一个脉冲表示一次JIT编译,窄脉冲表示持续时间短,宽脉冲表示持续时间长。

Class Loader Time(类加载时间): 3322loaded表示加载类数量, 0 unloaded表示卸载的类数量,1.577s表示类加载花费的时间。

GC Time(GC Time):3collections表示垃圾收集的总次数,9.242ms表示垃圾收集花费的时间,last cause表示最近垃圾收集的原因。

Eden Space(Eden 区):括号内的511.875M表示最大容量,384.000M表示当前容量,后面的292.562M表示当前使用情况,2collections表示垃圾收集次数,9.242ms表示垃圾收集花费时间。

Survivor 0/Survivor 1(S0和S1区):括号内的170.625M表示最大容量,64.000M表示当前容量,之后的值是当前使用情况。

Old Gen(老年代):括号内的1.500G表示最大容量,1.500G表示当前容量,之后的0表示当前使用情况,0collections表示垃圾收集次数 ,0s表示垃圾收集花费时间。

Perm Gen(永久代):括号内的64.000M表示最大容量,64.000M表示当前容量,之后的24.874M表示当前使用情况。

如果使用CMS或者Serial收集器,还会显示Histogram用来显示Survivor中对象的年龄。如果经常出现实际晋升阀值小于最大晋升阀值,则说明发生了Survivor溢出,需要进行JVM优化。



参考资料:
1. Charlie Hunt Binu John 著 柳飞 陆明刚译《Java性能优化权威指南》

你可能感兴趣的:(性能优化,JVM监控工具)