2017-03-09 3 views
0

最近JMHで作業を開始し、デバッグする方法があるかどうか疑問に思っていました。JMHフォーク、スレッド、デバッグ

私がやった最初のことは、他のプログラムと同じようにデバッグしようとしていましたが、「転送されていない転送が初期化されました」と投げたので、古い方法でデバッグできませんでした。

私がやったことは、インターネットで検索しようとしていて、フォークを0にする必要があると言った人を見つけて試してみました。

残念ながら、なぜフォークがデバッグに影響を与えているのか、フォークがJMHのものにどのように影響するのかを理解できませんでした。 これまで知っていたのは、OptionBuilderに.forks(number)を置くと、ベンチマークが実行されるプロセスの数が表示されます。しかし、私が.forks(3)を置くと、3つのプロセス非同期で@Benchmarkメソッドが実行されていますか?

.forks(number)、.threads(number)についての説明は、ベンチマークの実行方法とデバッグにどのように影響するのかで、実際には明らかになります。

答えて

2

通常のJMH実行では、いつでも2つのプロセスが実行されます。最初の( "ホスト")プロセスが実行を処理します。第2の(フォークされた)プロセスは、特定のベンチマークの1つのトライアルを実行して分離を実現するプロセスです。アノテーションまたはコマンドライン(アノテーションより優先される)を介してN個のフォークを要求すると、フォークされたプロセスに対してN回の連続した呼び出しが行われます。ゼロフォークを要求すると、ホステッドプロセス自体で作業負荷がまっすぐに実行されます。

ので、デバッグを行うには二つのことがあります。

a)は通常、あなたはフォークプロセスにアタッチすることができ、そしてそこにデバッグを。作業負荷を長く実行するように設定すると、接続して見回す時間が長くなります。フォークされたプロセスのエントリポイントは通常ForkedMainで、jpsに表示されます。

b)上記がうまくいかない場合は、-f 0と尋ねて、ホストプロセス自体に添付してください。

関連する問題