写完“如何在生产中检测和诊断慢速代码”一文后,我受到读者的鼓励,尝试从Azul系统尝试jHiccup 。
去年,我参加了jHiccup的创建者Gil Tene的演讲,探讨了测量延迟的正确方法,其中,他向我们介绍了jHiccup。 它一直在我的待调查产品清单上,这给了我最终继续进行调查的动力。
JHiccup可以测量实际程序代码以外的系统延迟。 例如,GC时间以及其他操作系统和硬件事件会增加延迟峰值,从而使程序的运行平稳。 了解这些至关重要,因为您的程序永远不可能比运行它的基础环境具有更好的延迟。
简而言之,我喜欢这个工具,并认为,既然我已经开始使用它,那么它将对我真的很有用。 这篇文章并不是要教您有关jHiccup的所有知识,我将为您提供有关它的文档 。 这个职位是一个“ 开始接触jHiccup指南”,告诉你我是如何得到它的运行,希望激起你的食欲尝试一下在自己的代码。
步骤1:下载产品
下载代码,它是开源的,您可以从此处获取。 解压缩文件,您将看到我们将在下一步中使用的jHiccup.jar。
步骤2:使用jHiccup运行程序
运行jHiccup的方法有很多,但这就是我的方法。 您需要做的就是将此vm选项添加到命令行中:
-javaagent:jHiccup.jar="-d 0 -i 1000 -l hiccuplog -c"
有很多配置,这里选择的意思是:
-
-d
开始记录等待时间之前的延迟–这可以忽略任何代码预热时间。 (30秒后默认) -
-i
间隔数据,记录数据的频率。 (默认每5秒一次) -
-l
记录数据的日志文件的名称。 -
-c
启动控件JVM并将数据记录到logFile.c。 与实际程序进行比较以查看是否是机器上的全局事件,超级有用。
步骤3:处理日志文件
在日志文件上运行此命令(您可以同时处理程序日志文件和.c控制日志文件)。
jHiccupLogProcessor -i hiccuplog -o myhlog
这将产生两个文件,我们将在最后一步中使用一个调用myhlog(不是myhlog.hgram),这很有趣。
步骤4:在Excel中产生图形
现在,非常好一点。 打开电子表格jHiccupPlotter.xls,并确保启用了宏。
您将看到一个这样的表:
只需从第3步中选择文件,然后选择一个图表标题(当您比较图表时,这是一个非常有用的功能),并且在几秒钟之内您将拥有一个延迟分布图。
例
我有一个程序(不是特别对延迟敏感的),想了解不同垃圾收集对延迟的影响。
我要做的就是用不同的垃圾收集器设置运行我的程序并比较图表。 当然,这是我刚好不得不手工制作的示例,但是您明白了,更改jvm设置或代码并获得可比较的结果很容易。 控制程序对于了解计算机上正在发生的其他可能影响程序延迟的情况也至关重要。
这些是我的结果:有趣的是看到不同的GC如何影响延迟,并且使用jHiccup可以很好地证明这一点。
使用串行收集器:
使用G1收集器:
使用G1收集器–最大暂停时间设置为1ms:
使用CMS收集器:
使用并行GC:
翻译自: https://www.javacodegeeks.com/2015/02/starting-out-with-jhiccup.html