java 延迟执行_Heapothesys-一款开源的GC延迟基准程序

e9357419e77aac61847502cee5436bb0.png

JVM

作者:DevOps亮哥

来自:DevOps探路者

Heapothesys是由亚马逊Corretto团队推出的,专门为应用程序开发人员比较不同的GC算法和选项,并检测GC性能和延迟回归JVM垃圾回收工作负载的集合。Heapothesys的发音是/ hɪˈpɒθɪsɪs /,它是由两个实用程序组成:HyperAlloc,这是一个开源的GC延迟基准程序,用于合成Java应用程序上的工作负载以研究对GC延迟的影响。Extremem,这是一个测试工作负载,用于评估无停顿垃圾收集各种方法的优缺点,Extremem中的工作负载将堆对象的分配和释放与业务逻辑的执行混合在一起。下面我们将讨论HyperAlloc。

HyperAlloc模拟了基本的应用程序特征,这些特征创建和测试由分配率、堆占用率和JVM标志定义的GC负载方案。利用由此产生的JVM停顿,开发人员可以产生自己的参考点来研究其应用程序中的边界。

HyperAlloc的灵感来自于HeapFragger,该实用程序可产生堆碎片,该堆由Azul Systems的首席技术官兼联合创始人Gil Tene创建。尽管不像HeapFragger那样功能丰富,但是HyperAlloc致力于通过评估直接导致GC压力的两个主要因素来准确预测最终的GC分配率:堆分配率和堆占用率定义为在垃圾回收期间对象扫描过程中产生的永久性活动对象总数的预订数量。这两个因素可以通过一组命令行参数进行配置:-a用于堆分配(默认:1024MB/秒)和-h用于堆占用率(默认:64MB)。

可以使用实用程序(例如:jHiccup)测量JVM的暂停时间,jHiccup是一种开源工具,用于测量Java运行时平台相关的应用程序的暂停和停顿。jHiccup有多种方式运行:

  • 作为java agent运行(例如:java -javaagent:jHiccup.jar -jar .jar)
  • 注入到运行中的应用程序(例如:jHiccup -p )
  • 对现有的Java应用程序使用命令行运行(例如:jHiccup java )

类似于HyperAlloc,jHiccup还支持一套完整的命令行参数。

入门

考虑以下模板,以了解如何使用各自的命令行参数配置JVM,jHiccup和HyperAlloc:

java -Xms -Xmx -Xloggc: -javaagent:/jHiccup.jar='-a -d 0 -i 1000 -l ' -jar /HyperAlloc-1.0.jar -a  -h  -d  -c  -l 

下面是使用该模板的以下两个具体示例:

java -Xms1g -Xmx4g -Xlog:gc:gc.log -javaagent:jHiccup.jar='-d 0 -l hiccups.hlog' -jar HyperAlloc-1.0.jar -a 65536 -h 128 -d 300 -l output.csvjava -Xms1g -Xmx4g -Xlog:gc:gc.log -javaagent:jHiccup.jar='-d 0 -l hiccups.hlog' -jar HyperAlloc-1.0.jar -a 131072 -h 128 -d 300 -l output.csv

这些测量中的每一个都会以1 GB(-Xms1g)的堆大小启动JVM ,使其增长到4 GB(-Xmx4g)并创建gc.log文件(-Xlog:gc:gc.log)。HyperAlloc配置为执行300秒并使用堆分配速率分别为65536 MB /秒和131072 MB /秒。

输出和数据分析

在完成两次测量之后,生成的输出包括:gc.log记录相关的GC信息;hiccups.hlog从jHiccup记录JVM暂停;并output.csv记录测量中使用的所有HyperAlloc参数,包括未在命令行上指定的默认值。

可以使用HistogramLogAnalyzer绘制结果,HistogramLogAnalyzer是一种实用程序,它hlog以jHiccup,Cassandra Stress和其他支持hlog文件格式的工具生成的直方图日志格式绘制日志文件。

对于以65536 MB /秒的堆分配速率进行的测量:

06cfbaf2a531becdc55b323861ffffbf.png
f036645e7534e966e66fa0273615fcb1.png

对于堆分配率为131072 MB /秒的测量:

6b6b32b887902652fd62873a681a5762.png
69148dc42a68c95a8054ee7da6af6903.png

请注意,使用较高的堆分配速率时,最大延迟时间存在显着差异。

jHiccup提供了自己的实用程序来处理hlog文件。对于两个测量中的每个:

/jHiccupLogProcessor -i hiccups.hlog -o out.log    

这将产生out.logout.log.hgrm,其中后者可以被导入并绘制成的高动态范围(HDR)直方图绘制应用,HdrHistogram,在线绘图工具,接受文件hgrm format。尽管此方法需要额外的步骤来生成hgrm格式的输出文件,但是可以导入多个文件以生成两个测量值的叠加图,如下所示:

6dc1352a2cba90cfe7de5217d2836532.png

Amazon Corretto团队将致力于增强Heapothesys,以更好地建模和预测其他应用程序行为。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值