jvm jstat_使用jstat的JVM统计信息

jvm jstat

过去,我已经写过关于Oracle和/或OpenJDK Java开发工具包(JDK)附带的几个命令行工具的信息,但是我从来没有专门写过jstat工具 。 Oracle JDK 9文档Early Access指出jstat用于“监视Java虚拟机(JVM)统计信息”。 还有一个警告,“此命令是实验性的,不受支持。” 尽管我引用了JDK 9文档,但jstat是以Java SE 8 , Java SE 7 , Java SE 6和J2SE 5中的某种形式( 一次称为jvmstat )成为Sun / Oracle JDK的一部分。 Java 1.4.1引入了HotSpot JVM的工具(仅在设置了-XX:+UsePerfData时启用),并且自Java 1.4.2开始提供了“始终在线”工具。

jstat提供的许多信息可以从可视工具(例如VisualVM ,JMX和平台MBean),垃圾收集日志或通过JVM选项中收集。 但是,与每个替代方案相比, jstat具有优势。 它的优点包括命令行工具所共有的优点,例如可以从脚本执行并运行而无需开发人员或其他人员。 能够将jstat应用于已经运行的Java进程以开始监视其JVM统计信息,而不是在启动JVM时指定对那些选项的监视,这也很有用。

对于本文中的示例,我正在使用Oracle JDK 9 build 164 。 下一个屏幕快照显示了该版本,还显示了开始使用jstat时要应用的第一个标志之一: -options标志。

如屏幕快照所示,以及jstat文档中所述 , jstat -options用于“显示特定平台安装的选项列表”。 在此处显示的示例中,以下选项可用:

  • -class
  • -compiler
  • -gc
  • -gccapacity
  • -gccause
  • -gcmetacapacity
  • -gcnew
  • -gcnewcapacity
  • -gcold
  • -gcoldcapacity
  • -gcutil
  • -printcompilation

在本文中,我将只讨论这些可用选项的一小部分,但是jstat文档提供了一个句子来描述每个jstat选项,并且每个选项的命令行用法与所有其他选项非常相似。 实际上,一旦学习了有关jstat使用的一些小知识,各种选项的执行就变得容易了。 使用jstat的困难部分通常是解释jstat提供的数据。

jstat -help选项将打印简单用法,如下一个屏幕快照所示。

jstat用法消息中,我们了解到jstat命令行工具是通过首先运行命令名称( jstat )和下一个带连字符的选项名称,然后是可选的-t和/或-h标志,然后运行该命令来执行的vimid ,并包含一个可选的时间间隔和在提供的时间间隔上执行命令的可选次数。 示例比描述性文字清晰,这篇文章和jstat文档中给出了一些示例。

为了监视“本地” JVM统计信息, vmid只是JVM进程的进程ID。 这与髋关节jcmd (或stodgy jps )为Java进程返回的PID相同。 下一个屏幕快照演示了使用jcmd的Java应用程序,我在我的例子(监测(在这种情况下,8728)来识别PID JEDIT在这种情况下)。

jstat文档的“虚拟机标识符”部分提供了有关vmid的更多详细信息,因为更复杂的vmid (用于JVM统计信息的远程监视)可以包括协议,本地目标计算机的vmid ,主机和端口。 尽管本文中的所有示例都将使用jstat和简单的Java PID( vmid ),但jstat文档的确提供了使用更详细的vmid进行JVM统计信息远程监视的示例。

对于本文中的其余示例,我想要一个Java应用程序,从JVM统计信息监视的角度来看,它比JEdit更有趣。 我决定在强烈推荐的Plumbr博客上使用Nikita Salnikov-Tarnovski的帖子“ Garbage Collection:提高吞吐量 ”中的“ PigInThePython ”示例应用程序。 如果您有兴趣查看PigInThePython的源代码,请参阅该文章 。

对于使用jstat第一个示例,我使用其最常用的选项之一: -gcutil 。 除了演示-gcutil选项之外,我还将使用第一个示例来演示和解释除gcutil之外通常适用于其他jstat选项的jstat输出选项。

以下屏幕快照演示了如何使用jcmd来获取PigInThePython应用程序的PID(在本例中为5096)以及如何以最简单的形式运行jstat -gcutil

jstat -gcutil以最简单的形式(没有其他选项)显示没有时间戳的单行输出。 列标题中描述jstat文档节“-gcutil选项”,其也描述了-gcutil选项如,“垃圾收集统计摘要”。 例如,本文档说明,其中一些列指示不同空间分配的使用百分比,而其他列指示垃圾收集事件的数量和垃圾收集的总时间。

我们通常希望将jstat提供的统计信息与受监视系统中其他事件发生的时间相关联,以识别这些事件与对JVM的影响之间的相关性。 jstat -t选项将在输出的开头加上时间戳。 此时间戳是自受监视的JVM启动以来的秒数。 尽管这对人类来说不像其他格式那样方便阅读,但确实可以将JVM统计信息与JVM运行所在的时间范围以及包含时间戳的垃圾收集日志相关联。 下一个屏幕快照演示了-t的作用:

监视JVM统计信息(例如由jstat -gcutil提交的统计信息)不止一次通常非常有用。 下一个屏幕快照演示了如何使用指定的间隔( 100ms指定的100毫秒间隔,以每100毫秒捕获并显示这些结果。

第一次显示快照后,最后一个屏幕快照中的输出永远不会重复带有列首字母缩写的标题。 如果希望在一定数量的行之后重复该标头,以便更轻松地知道哪些数字属于输出中更远的哪一列,则-h选项可用于指定列之后的结果数标头再次显示。 在下一个屏幕快照中, -h20用于每20行查看一次标题。

有时可能希望让jstat如此频繁地且仅在一定次数内提供其数据。 间隔允许您指定结果之间的持续时间,间隔之后的任何整数都将限制显示结果的总次数。 在接下来的屏幕快照,所述15处命令的末尾限制输出至15点总的行。

jstat -gccause选项返回与-gcutil相同的信息,但还会添加有关导致受监视垃圾收集的原因的信息。 以下屏幕快照对此进行了演示。

在上面的屏幕快照中,我们看到“上次垃圾收集的原因”(LGCC)是“ G1大量分配”,而“当前垃圾收集的原因”(GCC)是“无GC”(当前没有垃圾收集)进行)。

下一个屏幕快照演示了如何使用jstat -class查看“类加载器统计信息”,以了解已加载的类数(“ Loaded”),已加载的千字节数(第一个“ Bytes”),已卸载的类数(“ Unloaded”)以及数量卸载的字节数(第二个“字节”),以及“执行类加载和卸载操作所花费的时间”(“时间”)。

命令jstat -printcompilation指示“ Java HotSpot VM编译器方法统计信息”,并在下一个屏幕快照中演示。

-printcompilation选项显示列“已编译”(“最近编译的方法执行的编译任务数”),“大小”(“最近编译的方法的字节码的字节数”),“类型”(“最近编译的方法的编译类型”和“方法”(最近编译的方法的类/方法的名称,以与HotSpot VM选项-XX:+PrintCompilation一致的格式表示)。

使用jstat -compiler命令,我们可以查看“ Java HotSpot VM即时编译器统计信息”,例如执行的编译任务数(“ Compiled”),失败的编译任务数(“ Failed”),无效的编译任务数(“无效”),编译所花费的时间(“时间”),上次失败的编译的类型和类/方法名称(“ FailedType”和“ FailedMethod”)。 下一个屏幕快照对此进行了演示。

jstat还有更多可用的选项,其中大多数选项特定于受监视JVM中有关垃圾回收的不同观点。

jstat文档警告该工具是试验性的,在JDK的未来版本中可能会更改或删除。 该文档还警告不要编写脚本和工具来解析jstat的输出,因为将来输出的内容或格式可能会更改。 但是,我可以看到有人可能会冒这个险并编写解析代码,因为可以从脚本轻松访问此命令行工具,并且所需的解析代码不会很复杂。

这篇文章是jstat ,但是要了解更多有关该工具的知识。 与使用该工具相比,对该工具结果的解释要复杂得多,并且jstat提供的数据分析可能比收集数字的工作更具挑战性。 下面列出了一些其他资源,以提供有关使用jstat工具收集和分析Java虚拟机统计信息的更多信息。

其他jstat资源

  • Java Platform 9,标准版工具参考指南 : jstat
  • Java Platform 8,Standard Edition故障排除指南 : jstat实用程序
  • Plumbr:jstat
  • 使用jstat监视Java垃圾收集
  • 解释jstat的Full GC事件数
  • 解释jstat(堆内存)以怀疑Java内存泄漏
  • 解释jstat结果
  • jstat工具:-gc选项提供的新元空间统计信息
  • 学习java jstat
  • 'jstat -gcutil'–垃圾回收统计
  • 'jstat'命令选项和参数
  • 使用Jstat在Java中进行GC监视
  • 在Java中监视垃圾收集
  • 使用jstat报告自定义JVM指标集

翻译自: https://www.javacodegeeks.com/2017/05/jvm-statistics-jstat.html

jvm jstat

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/335049.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win10录屏工具_win10怎么录屏?这才是最长情陪伴你的录屏工具

win10怎么录屏?现在看视频的用户是越来越多了,一些经验类的视频教程越来越多,不仅能够教我们学习技能,也能给我们看一些会员才能看的视频内容,他们怎么怎么做的呢?当然是电脑录屏了,由于现在的电…

Macbook air 键盘失灵的解决方案

建议参考以下步骤: 确保您的 Mac 已经更新至最新版本。(重要:更新前建议您备份好 macOS 的数据。) 尝试重置 Mac 上的系统管理控制器 (SMC)。 尝试重置非易失的随机访问存储器(NVRAM)。 创建新的管理员帐户,使用新建…

python多行注释符号_涨知识Python 为什么用 # 号作注释符?

- START -关于编程语言中的注释,其重要性基本上已为大家所共识。然而关于注释的规范,这个话题就像我们之前聊过的缩进、终止符和命名方式一样,众口难调。注释符通常可分为两种,即行注释与块注释(inline/block),它们在不…

二叉树层次遍历算法 python_二叉树的遍历详解:前、中、后、层次遍历(Python实现)...

二叉树的遍历详解:前、中、后、层次遍历(Python实现)二叉树是一种常见的数据结构,而它的常见遍历方法有前序遍历、中序遍历、后续遍历、层次遍历——掌握这几种遍历方法是很有必要的。假设我们二叉树节点的定义如下——# Definition for a binary tree n…

java终结器_Java的终结器仍然存在

java终结器当我第一次学习Java并从C 过渡到Java时,我记得我经常被告知,经常读到它不应该像C 析构函数那样对待Java终结器,也不应该依靠它。 该建议的频率和坚持性对我产生了影响,以至于我无法回忆起我上一次编写finalize&#xff…

Sublime Text如何安装和卸载插件

文章目录如何查找插件如何安装插件通过包控制器安装插件手动安装插件如何卸载插件如何查找插件 建议先通过插件库来搜索你想要的插件,找到你想要的插件之后,你再选择安装方式进行安装,搜索插件请点击以下链接: Package Control中…

@insert 对象_python中列表插入append(), extend(), insert()

1 append()append:只能接收一个参数,并且只能添加在列表的最后。添加数字 In [1]: a [1,2,3] In [2]: a.append(4) In [3]: a Out[3]: [1, 2, 3, 4] 添加字符串 In [6]: a [1,2,3] In [7]: a.append("daniel") In [8]: a Out[8]: [1, 2, 3, …

mysql的锁是公平的么_lock 默认公平锁还是非公平锁?公平锁是如何定义?如何实现...

ReentrantLock的实现是基于其内部类FairSync(公平锁)和NonFairSync(非公平锁)实现的。 其可重入性是基于Thread.currentThread()实现的: 如果当前线程已经获得了执行序列中的锁, 那执行序列之后的所有方法都可以获得这个锁。公平锁:公平和非公平锁的队列…

企业性质

有限责任公司(国有控股) 有限责任公司(自然人投资或控股) 其他有限责任公司 有限责任公司(外国法人独资) 股份有限公司(非上市、国有控股) 有限合伙企业 有限责任公司(非自然人投资或控股的法人独资) 有限责任公司(外国法人独资) 有限责任公司(国有独资) 有限责任公司(台港澳法…

常用jdk的命令行工具:_jhsdb:JDK 9的新工具

常用jdk的命令行工具:我喜欢在分析性能和基于Java的应用程序的其他问题的早期步骤中使用JDK随附的命令行工具,并在诸如jcmd , jps , jstat , jinfo , jhat和jmap , jrunscript , jstack之类的 工…

佳能2900打印机与win10不兼容_佳能2900打印机和惠普1020哪种好 佳能2900打印机和惠普1020对比【详解】...

现在的人们早已经习惯遇到身边美丽的景色,就用手机进行拍摄下来了,若想长久的留住这一刻的美好,拥有一台 打印机 就是很不错的选择,如今打印机的需求量在不断的增加,市面上的打印机品牌也在不断的增多,我们…

Sublime Text for Windows的快捷键

文章目录选择文本移动光标编辑类查找/替换窗口显示书签其它选择文本 快捷键说明CtrlD先选中文本,再按CtrlD,会选中下一个相同的文本,再继续按D(Ctrl不放)则会选中下一个相同的文本,可以同时编辑被选中的文本AltF3选中文本按下快捷…

mysql 多表查询 join on_mysql多表查询

在做连表查询的时候,可以在联合的字段上面,分别加上索引字段,这样有加快搜索的速度左右连表查询时条件放在on后面和where后面的执行时机是不一样的例如test1表test2表执行SELECT * FROM test1 t1 LEFT JOIN test2 t2ON t1.not2.no AND t2.nam…

java 多模块模块变灰色_到底谁需要Java模块?

java 多模块模块变灰色拼图问题为1000。我作为X想要JPMS模块。 如果不是平台开发人员,X是什么? 我的回答是X是人(减去平台开发人员,因为那是一个条件) 。 我们都需要模块系统具有更安全的代码,从而产生更可…

python如何保持数据类型不变_python 可变和不可变数据类型、格式化输出和基础运算符...

一、可变类型和不可变类型#可变类型:在id不变的情况下,value可以变,则称为可变类型,如:列表,字典#不可变类型:value一旦改变,id也改变,则称为不可变类型(id变&#xff0c…

MacBook Air的命令终端如何在root和普通用户之间切换

有时你需要在一些root级别的目录下创建和删除文件,如果你没有切换到root用户下,系统会提示你没有权限,如下所示: liaowenxiongdeMacBook-Air:local liaowenxiong$ mkdir test mkdir: test: Permission denied liaowenxiongdeMacB…

mysql导入数据显示进度条_导入数据思路+进度条

/// ///基础数据导入/// private voidLoadBasicData(){this.NowCount 0;this.AllCount 0;this.hasResult false;try{DelegateShowProssBar mi newDelegateShowProssBar(ShowProcessBar);this.BeginInvoke(mi, new object[] { "导入基础数据", "导入数据"…

redis key失效的事件_《分享几道高频 Redis 高频面试题,面试不用愁》

1、说说 Redis 都有哪些应用场景?缓存:这应该是 Redis 最主要的功能了,也是大型网站必备机制,合理地使用缓存不仅可以加 快数据的访问速度,而且能够有效地降低后端数据源的压力。共享Session:对于一些依赖 …

mysql按加号没反应_请各位大哥给小老弟解疑答惑一下 为什么点击加号没有反应?感谢...

事件function count(){var sum;//获取第一个输入框的值var aparseFloat(document.getElementById("txt1").value);//获取第二个输入框的值var bparseFloat(document.getElementById("txt2").value);//获取选择框的值var cdocument.getElementById("se…

解决文件内容的中文乱码_字符集_字符编码_字符编码方案

从第三方下载的java源文件,打开查看里面的中文全部是乱码,无论你使用什么字符编码集都无法正常显示,该文件是用UTF-8编码存档的,使用UTF-8解码也同样是乱码,相信很多人遇到类似的问题,我这里解决过一个经典…