Java:同期呼び出しのカウント/プロファイリング

ドイツの羊飼いに

スケーラビリティの問題(スレッド/コアの観点から)を検出するために、実行中の並列Javaアプリケーションのすべての同期呼び出しを一覧表示する方法を探しています。私の理解では、同期されたブロックが入力されるたびに、マシンはキャッシュを同期する必要があります。これは、同期領域に入って実行中のタスクがブロックされていない場合でも、実行中のすべてのCPUに影響します(メモリ帯域幅など、いくつかの方法で)。

設定:

より高いレベルで並列化された大規模なアプリケーションがあります。つまり、並列で実行される複雑なタスクがあります。並列化は、すべてのコアに負荷がかかっており、ブロックされたスレッドがないという用語で機能します。それでも、パフォーマンスはコアに合わせてスケーリングされていません。これにはいくつかの理由が考えられます。私が興味を持っている特定の考えられる理由は、同期呼び出しがたくさんある場合です(たとえば、同期ブロックへの入力、ロックの使用など)。

タスク

コード内のどの場所(実際に実行されるか)にそのような同期呼び出しがあり、各同期が実際に実行される頻度を調べたいと思います。参照されるライブラリは多数あるため、同期されたキーワードなどで通常のコード検索を使用することはできません。これは、実行されていないコードを多数検索し、誤検知を多く発生させるためです。完璧な解決策は、実行されたすべての同期場所と呼び出しの数を一覧表示するプロファイラーを用意することです。ただし、私が試したプロファイラーでは、メソッド呼び出しのみがカウントされます。したがって、ここでの問題は、実際に関連するすべてのメソッドを見つけることです。

または、エントリポイント(メインメソッド)によって参照されている同期場所を見つけることができれば、それも役立ちます。つまり、コードを再帰的に調べて、参照されているすべてのメソッド、クラスなどでそのような同期を確認します。この場合、通常のプロファイラーを使用して、後で周波数を見つけることができます。

質問

より大きなプロジェクトのために上記のタスクをアーカイブできるツールまたはワークフローはありますか?

事前にTHXでお答えします。

アパンギン

同期ブロックへの出入りは、このブロックで競合がない限り、かなり安価な操作です。競合しない場合synchronizedは、アトミックCASであるか、UseBiasedLocking最適化が成功した場合はほとんど何もしませんInstrumentation APIを使用して同期プロファイラーを実行することは可能に見えますが、これはあまり意味がありません。

マルチスレッドアプリケーションの問題は、競合する同期です。JVMには、ロックの競合を監視するための内部カウンターがいくつかあります(この質問を参照)または、JVMTIイベントを使用して、競合するすべてのロックを追跡する簡単なアドホックツールを作成することもできます

ただし、ロックだけでなく、競合が発生する可能性があります。非ブロッキングアルゴリズムでさえ、共有リソースをめぐる競争に苦しむ可能性があります。これは、そのようなスケーラビリティの問題の良い例です。したがって、パフォーマンスの問題を見つけるのに通常はより便利なので、CPUプロファイラーから始める方が良いという@PeterLawreyに同意します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Java:同期呼び出しのカウント/プロファイリング

分類Dev

ChromeプロファイラーでのJavascriptカウント関数呼び出し

分類Dev

notifyAll()プロファイリング中の呼び出し回数の違い

分類Dev

JNI呼び出しによって実行されるJavaのプロファイリング

分類Dev

ファイルダウンロードのHTTPリクエストは、JQueryajax呼び出しを停止します

分類Dev

プラグインリファレンスを使用して外部でjQueryウィジェットのパブリックメソッドを呼び出す方法

分類Dev

Pythonでのプロファイリング:関数を呼び出したのは誰ですか?

分類Dev

Javaプログラムをリモートコマンドとして呼び出しながらローカルファイルを提供できるように、Javaプログラムとシェルスクリプトの組み合わせを作成するにはどうすればよいですか?

分類Dev

Pythonスクリプトのプロファイリング時に、cProfileの出力を呼び出しごとに並べ替えます。

分類Dev

Pythonスクリプトのプロファイリング時に、cProfileの出力を呼び出しごとに並べ替えます。

分類Dev

PythonからRスクリプトを呼び出しても、バージョン4のログファイルは保存されません

分類Dev

非同期ライブラリを使用したループ内のマングース非同期呼び出し

分類Dev

Flutter、非同期呼び出し後のウィジェットのレンダリング

分類Dev

Windowsディレクトリ内の一致するファイルをカウントするための最速の呼び出し?

分類Dev

Linuxの場合-クライアントアプリの呼び出しとダウンロードファイルのファイルを保存するフォルダーのアクセス許可を設定する方法

分類Dev

カスタムダイアログからのAndroidフラグメント呼び出し

分類Dev

フロントエンドのWPプラグインでAJAX呼び出しを行う方法

分類Dev

クリーニングファイルのアップロード(FileList)は「変更時に」イベントを呼び出さない

分類Dev

Java char []および文字列のプロファイリング

分類Dev

RxJSを使用して、他の非同期関数呼び出しが解決されるまで関数呼び出しをバッファリングする方法

分類Dev

Javaプログラムから呼び出されたWindowsコマンドプロンプトを使用して、複数の連続したスペースを含む文字列をパラメータとしてjarファイルに渡します。

分類Dev

ngForブロック内のテンプレート内の非同期パイプがhttpGET呼び出しループをトリガーします

分類Dev

ボタンから非同期タスクを呼び出すと、フラグメント内のリストアイテムをクリックします

分類Dev

非同期呼び出しによる自動再ログイン

分類Dev

asp.netmvcのアカウントコントローラーログインページからManagecontrollerGETメソッドを呼び出します

分類Dev

WebブラウザインスタンスからローカルPythonスクリプトを呼び出す

分類Dev

Javascriptでの非同期関数のプロファイリング

分類Dev

フラグメントから新しいインテントに呼び出されるスピナードロップダウン実装

分類Dev

GoプログラムからWindowsバッチファイルを呼び出して、新しいウィンドウで開くようにする

Related 関連記事

  1. 1

    Java:同期呼び出しのカウント/プロファイリング

  2. 2

    ChromeプロファイラーでのJavascriptカウント関数呼び出し

  3. 3

    notifyAll()プロファイリング中の呼び出し回数の違い

  4. 4

    JNI呼び出しによって実行されるJavaのプロファイリング

  5. 5

    ファイルダウンロードのHTTPリクエストは、JQueryajax呼び出しを停止します

  6. 6

    プラグインリファレンスを使用して外部でjQueryウィジェットのパブリックメソッドを呼び出す方法

  7. 7

    Pythonでのプロファイリング:関数を呼び出したのは誰ですか?

  8. 8

    Javaプログラムをリモートコマンドとして呼び出しながらローカルファイルを提供できるように、Javaプログラムとシェルスクリプトの組み合わせを作成するにはどうすればよいですか?

  9. 9

    Pythonスクリプトのプロファイリング時に、cProfileの出力を呼び出しごとに並べ替えます。

  10. 10

    Pythonスクリプトのプロファイリング時に、cProfileの出力を呼び出しごとに並べ替えます。

  11. 11

    PythonからRスクリプトを呼び出しても、バージョン4のログファイルは保存されません

  12. 12

    非同期ライブラリを使用したループ内のマングース非同期呼び出し

  13. 13

    Flutter、非同期呼び出し後のウィジェットのレンダリング

  14. 14

    Windowsディレクトリ内の一致するファイルをカウントするための最速の呼び出し?

  15. 15

    Linuxの場合-クライアントアプリの呼び出しとダウンロードファイルのファイルを保存するフォルダーのアクセス許可を設定する方法

  16. 16

    カスタムダイアログからのAndroidフラグメント呼び出し

  17. 17

    フロントエンドのWPプラグインでAJAX呼び出しを行う方法

  18. 18

    クリーニングファイルのアップロード(FileList)は「変更時に」イベントを呼び出さない

  19. 19

    Java char []および文字列のプロファイリング

  20. 20

    RxJSを使用して、他の非同期関数呼び出しが解決されるまで関数呼び出しをバッファリングする方法

  21. 21

    Javaプログラムから呼び出されたWindowsコマンドプロンプトを使用して、複数の連続したスペースを含む文字列をパラメータとしてjarファイルに渡します。

  22. 22

    ngForブロック内のテンプレート内の非同期パイプがhttpGET呼び出しループをトリガーします

  23. 23

    ボタンから非同期タスクを呼び出すと、フラグメント内のリストアイテムをクリックします

  24. 24

    非同期呼び出しによる自動再ログイン

  25. 25

    asp.netmvcのアカウントコントローラーログインページからManagecontrollerGETメソッドを呼び出します

  26. 26

    WebブラウザインスタンスからローカルPythonスクリプトを呼び出す

  27. 27

    Javascriptでの非同期関数のプロファイリング

  28. 28

    フラグメントから新しいインテントに呼び出されるスピナードロップダウン実装

  29. 29

    GoプログラムからWindowsバッチファイルを呼び出して、新しいウィンドウで開くようにする

ホットタグ

アーカイブ