java – JMH在基准测试之间挂起(无法杀死分叉的JVM?)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – JMH在基准测试之间挂起(无法杀死分叉的JVM?),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4418字,纯文字阅读大概需要7分钟。
内容图文
![java – JMH在基准测试之间挂起(无法杀死分叉的JVM?)](/upload/InfoBanner/zyjiaocheng/794/3efba7920a8948f69d9248196684cc89.jpg)
我有一大堆宏基准测试来测量使用不同执行引擎的各种模拟的执行时间(其中一些是多线程的).这些作业中的大多数都使用我在抽象基类中指定的jmh设置:
@ContextConfiguration(value = AbstractJobExecutorBenchmarker.CONTEXT_LOCATION)
@State(Scope.Benchmark)
@Fork(1)
@BenchmarkMode(Mode.SingleShotTime)
@Warmup(iterations = 1, timeUnit = TimeUnit.MILLISECONDS)
@Measurement(iterations = 5, timeUnit = TimeUnit.MILLISECONDS)
public abstract class AbstractJobExecutorBenchmarker extends AbstractTestNGSpringContextTests
(我还在命令行中添加了-gc -si false)
当我解雇任何一个基准或一些小的子集时,一切正常.然而,如果我尝试一次性运行所有这些(即没有过滤选项),jmh成功地完成了其中的一些,然后在一个特定的基准测试之后突然发生了frezees …完成它的完成,最终结果被打印,但它看起来像是分叉的JVM被杀死而且新的没有启动,似乎整个过程都被卡住了.打印的最后报表示例:
Iteration 3: 03:59:52.059 [pool-8-thread-1] INFO MessageTrafficController: Starting MessageTrafficController
03:59:52.059 [pool-8-thread-3] INFO MessageTrafficController: Starting MessageTrafficController
03:59:52.060 [pool-8-thread-5] INFO MessageTrafficController: Starting MessageTrafficController
03:59:52.060 [pool-8-thread-6] INFO MessageTrafficController: Starting MessageTrafficController
03:59:52.061 [pool-8-thread-7] INFO MessageTrafficController: Starting MessageTrafficController
03:59:52.061 [pool-8-thread-8] INFO MessageTrafficController: Starting MessageTrafficController
03:59:52.061 [pool-8-thread-9] INFO MessageTrafficController: Starting MessageTrafficController
03:59:52.061 [pool-8-thread-10] INFO MessageTrafficController: Starting MessageTrafficController
03:59:52.062 [pool-8-thread-13] INFO MessageTrafficController: Starting MessageTrafficController
03:59:52.062 [pool-8-thread-14] INFO MessageTrafficController: Starting MessageTrafficController
03:59:52.063 [pool-8-thread-15] INFO MessageTrafficController: Starting MessageTrafficController
03:59:52.063 [pool-8-thread-18] INFO MessageTrafficController: Starting MessageTrafficController
03:59:52.063 [pool-8-thread-19] INFO MessageTrafficController: Starting MessageTrafficController
03:59:52.064 [pool-8-thread-20] INFO MessageTrafficController: Starting MessageTrafficController
03:59:52.064 [pool-8-thread-22] INFO MessageTrafficController: Starting MessageTrafficController
03:59:52.065 [pool-8-thread-25] INFO MessageTrafficController: Starting MessageTrafficController
04:00:57.600 [pool-8-thread-6] WARN MessageTrafficController: Stopped due to class java.lang.InterruptedException
04:00:57.601 [pool-8-thread-7] WARN MessageTrafficController: Stopped due to class java.lang.InterruptedException
04:00:57.604 [pool-8-thread-13] WARN MessageTrafficController: Stopped due to class java.lang.InterruptedException
04:00:57.604 [pool-8-thread-10] WARN MessageTrafficController: Stopped due to class java.lang.InterruptedException
04:00:57.603 [pool-8-thread-8] WARN MessageTrafficController: Stopped due to class java.lang.InterruptedException
04:00:57.604 [pool-8-thread-9] WARN MessageTrafficController: Stopped due to class java.lang.InterruptedException
04:00:57.606 [pool-8-thread-22] WARN MessageTrafficController: Stopped due to class java.lang.InterruptedException
04:00:57.608 [pool-8-thread-25] WARN MessageTrafficController: Stopped due to class java.lang.InterruptedException
04:00:57.606 [pool-8-thread-20] WARN MessageTrafficController: Stopped due to class java.lang.InterruptedException
04:00:57.605 [pool-8-thread-15] WARN MessageTrafficController: Stopped due to class java.lang.InterruptedException
04:00:57.606 [pool-8-thread-19] WARN MessageTrafficController: Stopped due to class java.lang.InterruptedException
04:00:57.606 [pool-8-thread-18] WARN MessageTrafficController: Stopped due to class java.lang.InterruptedException
04:00:57.604 [pool-8-thread-14] WARN MessageTrafficController: Stopped due to class java.lang.InterruptedException
65598.920 ms
Result : 76749.529 ??(99.9%) 804946.698 ms
Statistics: (min, avg, max) = (39272.712, 76749.529, 125376.954), stdev = 44121.845
Confidence interval (99.9%): [-728197.169, 881696.226]
如果我手动杀死分叉的JVM,整个过程都会解锁.然而,在完成下一个基准后,它再次陷入困境……任何想法为什么会发生?为什么当我分别开启相同的基准时,它不会发生?
另外,JMH中是否有一些超时选项,如果正常关机需要太长时间,它会强制杀死分叉进程?
解决方法:
这已在JMH dev mailing list上得到解答:您需要调试工作负载以禁止杂散线程,挂钩等阻止分叉VM退出.
内容总结
以上是互联网集市为您收集整理的java – JMH在基准测试之间挂起(无法杀死分叉的JVM?)全部内容,希望文章能够帮你解决java – JMH在基准测试之间挂起(无法杀死分叉的JVM?)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。