2

現在、スレッド化された実行を理解するために、プログラム実行の同時動作をプロファイリングすることを約束するプロファイラーがいくつかあります。

私は、並行性のプロファイリングのみに集中しているJavaプロファイラーに役立つコレクション機能です。

これまでに収集したもの:

  • 潜在的なデッドロックを検出するための待機グラフの作成

  • アクセスリソース(データ構造など)の時間測定

  • すべてのスレッドの状態を表示する(生きている、中断されている、死んでいる)

  • どのスレッドが共有リソースにアクセスするためにどのスレッドを呼び出したか(待機、ブロックなど)

どんなアイデアがありますか?個人的には、Javaで並行性を処理するときに、いくつかの悪いプログラミング習慣を明らかにすることを目指しています。

4

4 に答える 4

1

各スレッドの要約統計: 各状態 (実行中、実行可能、ブロックなど) で費やした時間。

于 2011-02-17T17:16:13.053 に答える
0

どれでも

  • 競合するモニターまたはロック
  • 失敗したCAS
  • 揮発性の読み取りと書き込み

素晴らしいのは、以前は発生によって保護されていなかったため、際どい共有データを表示する方法です。しかし、行うのは難しい。

于 2011-02-18T03:15:53.533 に答える
0

各スレッドがブロックされている場合、スレッド コードがまったく複雑な場合、そのスレッドがブロックされていることを単に知っているだけでは、そのスレッドが待機している他のスレッドがわかったとしても、あまり有益ではありません。ブロックされた理由が知りたいです。

ブロックされた理由を知る方法は、ブロックされた時点でのコール スタックをキャプチャすることです。スタック上の各関数呼び出しサイトは、それが存在する理由の推論のチェーンに 1 つのリンクを提供します。

于 2011-02-18T13:48:23.463 に答える
0

競合がどこにあるかを見つけるために「ホット」モニターを検出するためのツール。たとえば、待機に費やされた合計時間でソートされたロックを表示し、ロックを保持していたコードのビットとロックを待機していたコードのビットを確認できます。

于 2011-02-17T17:19:34.267 に答える