1

私にはブロッキングキューがあり、ワーカーはそのキューから取得して、約1〜10ミリ秒間作業しています。

特定の時間枠でワーカーがアクティブでアイドル状態だった時間の相対的な数値を把握したいと思います(たとえば、直前に70%がアクティブでした)。

短い1msの期間を合計すると、不正確になる可能性があり、nano時間をフェッチすると多くのパフォーマンスが消費されます。

そのようなタスクを実行するためのいくつかのきちんとした方法はありますか?

これらのキューワーカーの設定はコードで頻繁に行われるため、実行時にボトルネックのプロファイルを作成できるようにしたいと思います。

編集:スレッドが機能しているかどうかだけを知りたいです。OSがスレッドを処理フォーカスから外した場合でも、カウントされます。キューロックを待機している場合のみ、アイドル時間としてカウントする必要があります。

4

1 に答える 1

2

プール内の各スレッドの Thread.getState() をサンプリングし、サンプルが取得されたときに各状態にあったスレッドの割合を報告するアプローチはどうでしょうか?

そうすれば、スレッドが NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、および TERMINATED であることが判明した頻度を把握できます。

私が考えることができる他の唯一のアプローチは、プロファイリング ツールでコードを実行することです。YourKit の Java プロファイラーは非常に優れており、1530 日間の試用ライセンスが付属しています...

http://www.yourkit.com/java/profiler/

于 2011-11-28T21:39:46.420 に答える