开发Java的朋友在应用中一定遇到过不同类型的问题,有时是应用Bug分析,有时是应用性能调优、应用Profiling、GC分析,等等这时候可以选择的工具有很多,有商业的,有开源的,可以在不同的场景下使用。我们这次的多功能Profile工具还是JDK自带的,可以用于各种场景下的应用监控和分析。这个工具就是JVisualVM,全称是JavaVisualVM。它是一个可视化的JavaVM应用程序分析工具。启动后是这样的:分为本地和远程两种,列出当前JVM进程。远程进程通过JMX连接,不支持部分本地Profile函数。下面以本地进程为例介绍一下JVisualVM的常用功能。双击要分析的JVM进程,在打开的Tab中选择功能,默认会显示overview、monitoring、thread、sampler和Profiler。由于VisualVM的实现与NetBeans一致,因此可以通过插件的方式添加很多功能。在【工具】菜单中选择【插件】,打开下图,然后选择要安装的插件,也可以下载插件到本地再安装。该格式是一个扩展名为nbm的文件。和我们后面介绍的VisualGC一样,BTrace也是通过插件安装的方式来添加相应的功能。Overview在overview选项卡中,会显示当前JVM进程的一些基本信息,包括JVM参数、系统属性、Main-class等。类似下图:请注意上图中的红框。这是在常规启动期间配置的JVM选项。可以在OOM发生时生成heapdump,方便后续分析。如果在启动时未配置,则默认关闭。此处还显示禁用。通过VisualVM,可以实时更改这个选项,右击对应的JVM进程,在弹出的菜单中选择【发生OOME时生成堆转储】。选择后,相应的概览将启用。监控将在此选项卡中显示CPU、堆使用情况、加载的类和线程活动。关键是有【ExecuteGarbageCollection】和【HeapDump】两个按钮。垃圾回收会进行FullGC,堆的转储会生成当前转储文件供分析。ThreadThreadTab会以时间线的形式打开当前进程的所有线程。可以根据不同的线程状态来查看。这里也可以进行线程的dump,这与jstack生成所有线程的运行调用图的功能是一致的。(jstack,可以查看之前的文章了解。Java七兵种系列霸王枪——线程状态分析jstack)采样器可以根据CPU和内存进行采样,类似于Profiler,后面会介绍。在Profiler的众多功能中,该功能可用于对应用程序进行性能分析,分析应用程序方法的占用时间,内存中各类对象的数量和大小等。下图是CPUprofiling,分析方法的执行时间。这张图是memoryprofiling,显示内存中对象的数量和大小。通过这两种profiling,当应用有大量内存使用时,可以观察到哪些对象占用了它,是否有total是产生大量无用对象的结果等等。这两个功能类似于工具MAT的几个功能。VisualGC注意事项:此Tab需要安装插件才能显示。长期以来,Java的GC只能在命令行上为我们显示,或者我们可以从gc日志中查看一些执行状态。VisualVM的VisualGC插件可以让我们更直观的观察堆的占用情况。GC执行等,是一款可视化的GC查看工具。通过这个工具,可以观察堆的各个区域的大小和占用情况。比如Xms,PermSize,或者一些xxxRation配置之后,每一代的具体大小是多少?除了计算,你还可以在这里直观地查看。同时,在每个Gen的旁边,会显示GC执行的次数和时间。BTrace的前一篇文章写了使用BTracealways分析,当时介绍了使用命令行的方式。在VisualVM插件中,还有一个BTrace插件。安装完成后,可以在本地JVM进程上右击选择【Trace应用】,会打开选项卡,然后直接在窗口中编译Trace脚本,执行结果也会显示在显示的窗户。注意这里有一个Unsafe开关,可以使用BTrace的更多操作,不能通过勾选来开启。需要在@BTrace注解后添加内容。格式如下:@BTrace(unsafe=true),checkbox会被自动选中。HeapDumpheapdump生成后,相当于对当前堆做了一个镜像。基于此,可以分析应用中的一些问题。在整个dump中,除了summary之外,还有classes,instancenumbers等等,这些都是和Profiler中的实时内容一致的。此外,还包括线程的堆栈跟踪。双击类中任意一个需要关注的,会打开实例数视图,显示该类对应的每个实例的数据。在OQL控制台中,可以通过娱乐OQL查看对象的信息,这和之前SA中的介绍类似。(Java七兵长生剑系列——Java虚拟机的微观服务能力代理)发现没有,其实JDK提供的这些工具很多功能都是一样的,通过统一的接口在不同的应用中提供相应的数据,出处世界之水。【本文为专栏作家“侯书城”原创稿件,转载请通过作者微信公众号“Tomcat物语”获得授权】点此查看本作者更多好文
