2017-03-09 80 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,並附加到主機進程本身。