2017-03-09 83 views
0

我最近开始使用JMH,并想知道是否有可能的方式来调试它。JMH分叉,线程和调试

我做的第一件事就是尝试像调试其他程序一样调试它,但它抛出了“No transports initialized”,所以我无法以旧式的方式进行调试。

我做的下一件事是尝试在互联网上搜索,发现有人说你需要把叉子放到0,尝试它,它的工作。

不幸的是,我无法真正理解叉为什么会影响调试,或者叉如何影响我在JMH中看到的东西的方式。 到目前为止,我所知道的是,当你在OptionBuilder中放入.forks(数字)时,它会告诉你基准将运行多少个进程。但如果我把.forks(3)运行在每个@Benchmark方法上的3个进程异步?

关于.forks(数字),.threads(数字)的解释他们如何改变基准测试的方式以及它们如何影响调试,将会真正地解决问题。

回答

2

因此,正常的JMH运行有两个进程在任何给定的时间运行。第一个(“主机”)进程处理运行。第二个(“分叉”)过程是对给定基准进行一次试验的过程 - 实现隔离。通过注释或命令行(优先于注释)请求N个分支会为分支进程创建N个连续调用。请求零分叉直接在托管流程本身中运行工作负载。

因此,有两两件事要做调试:

一)一般情况下,你可以连接到分叉过程,并调试它。它有助于将工作负载配置为运行时间更长,以便有足够的时间进行附加和环视。分叉过程通常具有ForkedMain作为其入口点,在jps中可见。 b)如果上面的东西不起作用,请询问-f 0,并附加到主机进程本身。