Javaスレッドの使用率を測定します
-
25-10-2019 - |
質問
私はブロッキングキューとそのキューから取って、その後約1〜10msで作業しています。
労働者が特定の時間枠でどれだけの時間がアクティブでアイドル状態であるかについての相対的な数字を把握したいと思います(たとえば、土壇場で70%がアクティブ)。
短い1MS期間をまとめることは、ナノ時間消費を不正確にして、多くのパフォーマンスに至ることです。
そのようなタスクを行うためのきちんとした方法はありますか?
これらのキューワーカーのセットアップはコードに頻繁にあります。そのため、実行時にボトルネックをプロファイルできるようになりたいと思います。
編集: スレッドが機能しているかどうかを知りたいだけです。 OSがスレッドを処理フォーカスから移動する場合、それはまだカウントされます。キューロックを待つ場合のみ、アイドル時間としてカウントされる必要があります。
解決
プール内の各スレッドのスレッドをサンプリングし、サンプルが採取されたときに各状態にあったスレッドの%を報告するアプローチはどうですか?
そうすれば、スレッドが新しい、実行可能、ブロックされ、待機、タイミングで終了し、終了したことがわかった頻度で感触を得ることができます。
私が考えることができる他の唯一のアプローチは、プロファイリングツールでコードを実行することです。 yourkitのJavaプロファイラーはとても素敵で、1530日間の試用免許が付属しています...
所属していません StackOverflow