JHSDB

我喜欢在分析性能和其他基于Java的应用程序的其他问题的早期步骤中使用JDK随附的命令行工具,并在诸如jcmd , jps , jstat , jinfo , jhat和jmap , jrunscript , jstack之类的 工具上进行 博客撰写jdeps 。 JDK 9带来了新的命令行工具与具体涉及到新的JDK 9的功能,如模块(多个工具JLINKJMOD )和增强弃用( jdeprscan )。 在本文中,我将重点介绍JDK 9随附的用于处理性能和可维护性问题的新命令行工具: jhsdb 。

jhsdb工具在其Oracle JDK 9 Documentation Early Access页面上进行了描述 ,“您使用jhsdb工具来附加到Java进程或启动事后调试器来分析崩溃的Java虚拟机(JVM)的核心转储内容。 )。” 该工具带有几个“模式”,并且这些模式中的几个在名称和功能上与以前的JDK发行版中可用的各个命令行工具相对应。 jhsdb工具不仅提供包含多个其他工具功能的单个工具,而且还提供应用这些不同功能的统一方法。 例如,用于获取每个“模式”的帮助的jhsdb命令行语法是相同的。

jhsdb工具可以通过其进程标识符(PID)附加并应用于正在运行的JVM(包括正在挂起的JVM),类似于其他几种工具(包括jcmd )的工作方式。 如果提供了核心文件和可执行文件,则jhsdb工具还可用于分析与崩溃的JVM相关的核心信息。 作为一致性的一个例子jhsdb提供,其所有的模式支持“共同选项” --pid (指定目标JVM的进程ID), --exe (指定的目标可执行), --core (指定目标核心转储文件)和--help (显示特定于每种模式的选项)。

下一系列快照展示了--help选项与主jhsdb命令以及jhsdb的几种“模式”中的每一个的jhsdb 。 一个观察可以做出的是,常用的选项--pid , --core--exe由所有模式中提供。 由此可以明显看出,每种模式所支持的特定功能都是那些“通用”选项以外的功能。

jhsdb“ jstack”模式

jhsdb模式jstack--help具有两个特定的功能选项:-- --locks--mixed 。 以下两个屏幕快照演示了这些内容。

刚刚显示的屏幕快照表明jhsdb工具的jstack模式为我们提供了死锁检测详细信息,有关线程锁的信息以及本机框架Java框架的概述。

jhsdb“ jmap”模式

jhsdb模式jmap--help显示了该模式支持的几个功能。 当仅使用--pid或仅使用--exe / --core组合执行jhsdb jmap , 输出类似于 Linux pmap命令提供的输出 。

正如人们所期望的, jhsdbjmap模式提供的功能类似于单独但名称相似的jmap命令提供的功能。 这些包括堆转储( --heap ),类直方图( --histo ),类加载器统计( --clstats ),和释放信息( --finalizerinfo )和在以下四个屏幕快照证明。

jhsdb“ jinfo”模式

不足为奇的是, jinfo所述的模式jhsdb命令提供了与该重叠通过所提供的功能性金佛山命令 。 具体而言, jhsdbjinfo模式允许查看目标JVM的标志系统属性 。

jhsdb jinfo使用三个主要选项:-- --flags查看JVM标志,-- --sysprops查看系统属性,或者no参数查看标志和系统属性。 接下来的两个屏幕快照演示了jhsdb jinfo --flagsjhsdb jinfo --sysprops 。 不带任何参数运行jhsdb jinfo先显示系统属性,然后显示标志,但此处未显示。

jhsdb“ jsnap”模式

jhsdb模式jsnap提供对内部类sun.jvm.hotspot.tools.JSnap先前提供的信息的访问,该类先前在lib/sa-jdi.jar可用,并且已添加到 JDK 9的jhdsdb中。有两个选项根据是否提供特定于模式的自变量或是否提供--all特定于模式的自变量从jhsdb jsnap输出结果。 接下来的两个屏幕快照演示了这两个选项。

这些屏幕快照表明,没有特定于模式的选项的jhsdb jsnap列出诸如与线程和类加载/卸载有关的事件以及核心JVM属性之类的信息。 添加--all选项列出了这些相同的属性,但此外还添加了更多的属性,并且根据文档 ,“打印所有性能计数器” 。

顺便说一下,Marcus Hirt的《使用JVM性能计数器》提供了有趣的外观,介绍如何应用JMX和自定义MBean来实现“类似于JRockit中可用的PerformanceCounters MBean”的工具。 我相信jhsdb jsnap --all带来了在HotSpot中查看相同类型信息的简单功能,就像Hirt所说的在jrcmd -l中使用jrcmd -l 。

jhsdb调试模式

三种jhsdb模式hsdb (用于交互式调试的图形用户界面), clhsdb (用于交互式调试的命令行界面)和debugd调试(远程调试服务器)与调试操作相关。 在以后的文章中,我可能会仔细研究这些模式,但是现在,我仅显示一些屏幕快照,这些快照演示了使用jhsdb hsdb的图形交互。 GUI从jhsdb hsdb --pid <pid>启动,此处显示的大多数选项都是通过选择“工具”下的特定菜单选项来运行的。

正如在HotSpot的“隐藏的宝藏 ”一文中可以看到的那样,可维护性调试器GUI在JDK 9和jhsdb之前就已经可用,但是本文还显示了在JDK 9引入jhsdb之前查找和启动该工具要困难jhsdb 。

jhsdbjcmd以及与其他命令行JDK工具的关系

我在博客文章jcmd中总结了通用工具jcmd与其他JDK提供的命令行工具的关系:一个JDK命令行工具可以全部统治它们 。 我在这里修改该表以将jhsdb添加到组合中。

功能性jhsdbjcmd类似工具
列出Java进程不适用1jcmdjps -lm
堆转储jhsdb jmap --binaryheapjcmd <pid> GC.heap_dumpjmap -dump <pid>
堆使用直方图jhsdb jmap --histojcmd <pid> GC.class_histogramjmap -histo <pid>
线程转储jhsdb jstack --locks
(锁定线程框架的子集)
jcmd <pid> Thread.printjstack <pid>
列出系统属性jhsdb jinfo --syspropsjcmd <pid> VM.system_propertiesjinfo -sysprops <pid>
列出VM标志jhsdb jinfo --flagsjcmd <pid> VM.flagsjinfo -flags <pid>

1您可以使用jcmdjps -lm标识PID,如果与正在运行的JVM jcmd ,则jhsdb , jcmd和许多其他工具将在该PID上起作用。 我在这篇文章中使用jcmd来标识PID,但是当前的jhsdb文档演示了使用jps来获取JVM PID。

jhsdb工具是主要是命令行工具,也具有可选的交互式GUI,该GUI可支持报告挂起或崩溃的JVM的许多通常需要的属性。 它提供了跨其模式的一致界面,并且命令行交互允许交互式帮助请求,因此在应用该工具之前必须了解或记住很少的语法。 如果可以记住“ jhsdb ”,则可以有效地开始使用该工具。 jhsdb工具是JDK 9的新增功能,但将功能集成到一个工具中,该工具以前可以从多个工具中获得。

翻译自: https://www.javacodegeeks.com/2017/06/jhsdb-new-tool-jdk-9.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值