openjdk正在从jdk中废弃hprof agent 并移除“jhat”工具。这是openjdk 9的java se平台借助jigsaw实现模块化的结果,为了准备模块化,起草了多项提议(jep),并且其中有很多都已经接近完成了。
让我们近距离地了解一下这两个与模块化jdk相关的jep,它们的目标就在于移除hprof agent和“jhat”工具:
移除jvm tool interface hprof agent
hprof是一个profiler agent,它使用jvm tool interface(jvmti)来提供工具接口,并且用到了 bytecode instrumentation。hprof agent能够将profiling信息写到文件中,这些信息包括基于allocation sites的堆使用情况、堆dump、cpu使用情况、争用监控等,它还可以将这些信息通过socket进行发送。hprof无意成为生产型的工具,它能够被下文所述的各种其他可选方案所替代:
hprof能够获取heap allocation profile、cpu使用的采样数据以及times profile,按照其最简单的形式分别如下面的命令所示:
相应的功能可以通过java性能监控工具visualvm来实现,这是一个可视化的工具,集成了多个命令行jdk工具和轻量级profiling功能。与hprof不同,visualvm能够用在生产以及开发环境中,并且提供了额外的特性,如生成线程(和堆)dump、查看heap dump、本地和远程的java应用监控以及离线性能分析等等。
hprof也能通过如下的命令生成heap dump:
按照jep 240,这个功能将会被jvm中相同的功能所取代,这是通过使用像“jcmd”和“jmap”这样的命令行工具做到的,如下所示:
或者
按照“jcmd”工具的文档,如果要创建堆(hprof)dump的话,“jcmd”是推荐使用的工具。
移除“jhat”工具
“jhat”是一个堆分析工具,它会解析java heap dump并且能够在web浏览器中查看解析过的heap dump。借助“jhat”,用户可以执行一些标准的查询或使用 oql接口编写自定义的查询。
按照jep 241, jhat是一个实验性的、不再支持的过时工具。尽管jep并没有指定特定的替代工具,但是infoq还是再次为用户推荐 java visualvm ,用它来实现heap dump的创建、可视化和分析。visualvm还允许用户执行自定义的查询或使用标准的查询。
====================================分割线================================