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

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

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

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, …

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

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

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

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

mysql 多表查询 join on_mysql多表查询

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

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

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

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

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

rust为什么显示不了国服_捋捋 Rust 中的 impl Trait 和 dyn Trait

缘起一切都要从年末换工作碰上特殊时期, 在家闲着无聊又读了几首诗, 突然想写一个可以浏览和背诵诗词的 TUI 程序说起. 我选择了 Cursive 这个 Rust TUI 库. 在实现时有这么一个函数, 它会根据参数的不同返回某个组件(如 Button, TextView 等). 在 Cursive 中, 每个组件都实现了…

mysql不支持子查询_MySQL不支持子查询优化一例

一创建表 create table tt1(id int primary key, c1 INT);create table tt2(id int primary key, c2 INT);insert into tt1 value一创建表create table tt1(id int primary key, c1 INT);create table tt2(id int primary key, c2 INT);insert into tt1 values(1,1),(2,2),(3,3…

Mysql索引使用情况_介绍mysql索引失效的情况

mysql视频教程栏目索引失效的情况。索引对于MySQL而言,是非常重要的篇章。索引知识点也巨多,要想掌握透彻,需要逐个知识点一一击破,今天来先来聊聊哪些情况下会导致索引失效。图片总结版相关免费学习推荐:mysql视频教程…

java 类 null_深入理解java中的null“类型”

本文研究的主要是java中的null“类型”的相关实例,具体介绍如下。先给出一道简单的null相关的题目,引发我们对null的探讨,后面会根据官方语言手册对null“类型”进行解读。题目:下面程序能正确运行吗?解析:输出应该为 …

如何彻底禁用Chrome浏览器的缓存功能

禁止Chrome浏览器的缓存功能有几种方式: 使用Shift F5强制刷新缓存。实际使用中我们发现,这种方法对于部分网页的更改并不能做到释放缓存的作用,尤其是无法释放DNS缓存。 使用隐身模式Shift Control N. 这种方法只能在打开的页面上消除之…

java int integer内存_java中一个integer对象的内存占用是多少?可以通过java方法输出吗?...

今天翻记录看到了自己15年3月份提的问题,现在已经18年6月份了;去年线上项目出现内存瓶颈,原因是缓存的玩家角色数据过多,在长时间不停服的情况下,导致数据越来越膨胀,之前没有清除无用缓存的机制&#xff0…

windows查看器无法打开图片_关于windows微软商城无法打开 错误代码0x80004003问题...

我本来是商城可以进 但是一打开里面的东西就无法打开 按下面的刷新就闪退 如下图操作桌面winr 运行 services.msc然后找到windows update打开就行 但是开启了系统会自动更新若是修改时显示拒绝访问桌面winr 输入regedit打开注册表 注册表找到HKEY_LOCAL_MACHINESYSTEMCurrentCo…

win10 java 反编译_win10下对.java源文件进行编译和反编译的步骤

1、先写好代码,如下找了个示例代码,文件名是Mutex.java:package com.huangshiyi.concurrent.cha04;import java.util.concurrent.TimeUnit;public class Mutex {private final static Object MUTEX new Object();public void accessResource…

电容屏物体识别_相比传统的触摸屏,电容式触摸屏的优势

点击蓝字,轻松关注今日话题 如今,我们的身边有着许多电子产品,主要是因为它便于我们的生活,所以我们的身边出现了许多触摸屏。对于电子产品,我们使用之前要了解清楚它的使用性能,掌握多点信息,这…

java底层机制_Java同步机制的底层实现

在多线程编程中我们会遇到很多需要使用线程同步机制去解决的并发问题,而这些同步机制就是多线程编程中影响正确性和运行效率的重中之重。这不禁让我感到好奇,这些同步机制是如何实现的呢?好奇心是进步的源泉,就让我们一起来揭开同…

payara 创建 集群_高可用性(HA),会话复制,多VM Payara群集

payara 创建 集群抽象 在研究如何创建高可用性(HA)时,我发现了会话复制,多机处理的Payara / GlassFish群集,无法在单个参考中找到所需的一切。 我认为这将是一个普遍的需求并且很容易找到。 不幸的是,我的假…