开发 Java 的朋友一定都遇到过应用不同种类的问题,有些时候是应用 Bug 分析,有些时候是应用性能调优,应用的 Profiling,GC 分析等。
创新互联是一家集网站建设,海林企业网站建设,海林品牌网站建设,网站定制,海林网站建设报价,网络营销,网络优化,海林网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
这个时候,有不少的工具可供选择,有商业的,有开源的可供不同的场景下使用。我们本次的多功能 Profile 工具,依然是 JDK 自带的一款,可用于多种场景下的应用监控于分析。
这款工具就是JVisual VM,全称是 Java VisualVM。是一款可视化的 Java VM 应用分析工具。
启动后是这个样子:
分本地和远程两种,罗列了当前的 JVM 进程。 远程的进程是通过 JMX 进行连接,有一些本地的 Profile 功能不支持。
我们以本地进程为例,来介绍下JVisual VM 常见功能。
双击要分析的 JVM 进程,在打开的 Tab 中选择功能,默认会显示概述、监视、线程、抽样器和 Profiler 这几项。
由于Visual VM 实现和 NetBeans 一致,所以可以通过插件的方式,增加许多功能。
在【工具】菜单,选择【插件】,打开下图,然后选择要安装的插件,也可以将插件下载到本地再安装。格式是一个扩展名为nbm类型的文件。
像我们稍后要介绍的Visual GC, BTrace 都是通过插件安装,来增加对应功能的。
概述
在概述这个 Tab 中,会有当前 JVM 进程的一些基本信息,包含 JVM的参数,系统属性,Main-class 等等。类似如下图:
请注意上图红框,这个是一般启动时配置的一个JVM选项,可以在 OOM 产生时生成一个堆的 dump,方便事后分析。如果没有在启动时配置,默认是关闭的。这里也显示是禁用。
通过 Visual VM,可以实时变更该选项,右击对应的 JVM 进程,在弹出菜单中选择【在出现OOME时生成堆 Dump】
选择之后,对应的概述处变为启用。
监视
在该 Tab 中会显示 CPU,堆的使用,已装入的类的情况,以及线程的活动情况等。关键是这里有两个按钮【执行垃圾回收】和【堆 Dump】。
垃圾回收会进行一次 Full GC,堆的Dump会生成一个当前的dump文件供分析。
线程
线程 Tab 会将当前进程的所有线程按时间线的形式开出来。可以根据不同的线程状态进行查看。这里还可以进行线程的 Dump,和 jstack 功能一致,生成一个所有线程的运行调用图。(jstack,可以查看前面的文章了解。Java七武器系列霸王枪 -- 线程状态分析 jstack)
抽样器
可以按照 CPU 和内存进行抽样, 和Profiler类似,我们后面介绍。
Profiler
在众多功能中,该功能可用于进行应用的 Profiling,分析应用方法的占用时间,内存中各个类的对象数量及大小等。
下方的图是CPU profiling,分析方法的执行时间。
这张图是内存的 profiling,显示对象在内存中的数量及大小
通过这两种 profiling,对于应用中有内存占用较多的情况发生时,可以观察是哪些对象占用,是否有些代码中存在的总是导致生成的大量无用的对象等。
这两个功能和工具 MAT 的几个功能类似。
Visual GC
注意:该 Tab 需要安装插件后才能显示。
一直以来,Java 的 GC 对于我们来说只能通过在命令行中展示的方式,或者是从 gc log 里查看一些 执行情况,Visual VM 的 Visual GC 插件,可以让我们更直观的观察 堆的占用,GC 的执行情况等,是个可视化的GC 查看工具。
通过这个工具,能够观察堆各个区域的大小,占用情况等。比如在配置了Xms, PermSize, 或者一些 xxxRation之类的,具体分到各个代的大小是多少,除了计算之外,可以在这里直观的查看。
同时,在每个每个 Gen 旁边,都有显示 GC 的执行次数和时间。
BTrace
前面的文章写过使用 BTrace 分析总是,当时是介绍通过命令行的方式。在 Visual VM 的插件里,也有 BTrace 的插件,安装之后,可以在本地的 JVM 进程上右击选择 【Trace application】,就会打开该 Tab,然后在窗口中直接编译 Trace 脚本,执行结果也会在窗口中显示。
注意这里有一个Unsafe的开关,可以使用BTrace的更多操作,靠选择checkbox是打不开的。需要在@BTrace注解后增加内容,格式如下:
- @BTrace(unsafe=true)
这样即可,checkbox会自动选中。
堆Dump
生成堆dump之后,相当于对当前的堆做了一个镜像,可以基于此分析应用内的一些问题。
整个dump中,除了摘要外,还有类,实例数等和 Profiler 中实时内容一致。此外,还包含线程的 stackTrace。
在类中双击任意一个要关注的,会打开实例数视图,显示该类对应的各个实例的数据
在OQL控制台中可以通过招待OQL来查看对象的信息,和前面 SA中介绍的类似。(Java七武器系列长生剑 -- Java虚拟机的显微镜 Serviceability Agent)
发现没有,其实 JDK 提供的这些工具中,有许多功能都是相同的,通过统一的接口,在不同的应用中提供相应的数据,一处水源供全球。
【本文为专栏作者“侯树成”的原创稿件,转载请通过作者微信公众号『Tomcat那些事儿』获取授权】
新闻标题:Java七武器系列多情环--多功能Profiling工具JVisualVM
链接分享:http://www.shufengxianlan.com/qtweb/news19/33519.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联