25

アクター間で多くのメッセージを渡す小さな Akka アプリケーションがあり、各アクターは受信したデータに対していくつかの計算を行います。私が望むのは、このアプリケーションをプロファイリングして、コードのどの部分が最も時間がかかるかなどを確認することです。

VisualVM を試してみましたが、何が起こっているのかよくわかりません。プロファイラー出力の写真を追加しました。

私の質問は

  • たとえば、この最初の行は何で、なぜそんなに時間がかかるのでしょうか? (scala.concurrent.forkjoin.ForkJoinPool.scan())
  • Akka アプリケーションは、その非同期動作のために適切にプロファイリングできますか?
  • たとえば、特定のアクター (タイプ) が受信した特定のメッセージ (タイプ) に対してどれくらいの時間動作するかを確認できますか?
  • Akka アプリケーションをプロファイリングするためのベスト プラクティスは他にありますか?

プロファイラ

4

3 に答える 3

14
  • デフォルトではプロファイルされないパッケージがあり、 のプロファイルで考慮されるのはその時間ですscala.concurrent.forkjoin.ForkJoinPool.scan()。非表示のパッケージをすべてサンプリングできるようにすると、真の CPU 時間消費者が明らかになります。たとえば、次のプロファイル前後の例では、ほとんどの場合、スレッドが保留解除されるのをsun.misc.Unsafe.park待機することによってスリープ状態になっていることがわかります。 前後
  • Akka アプリケーションは、適切なインストルメンテーションとコール トレースを使用して、非常に適切にプロファイリングできます。Google の著名なDapper である大規模分散システム トレース インフラストラクチャの論文には、この手法の詳細な説明が含まれています。Twitter はそれに基づいてZipkinを作成しました。これはオープンソースであり、Akka の分散トレース用の拡張機能を備えています。を許可するシステムをセットアップする方法の良い説明については、そのwikiに従ってください。

    • アクター システム内の呼び出し階層をトレースします。
    • デバッグ要求処理パイプライン (トレースにログを記録し、カスタム キーと値のペアで注釈を付けることができます);
    • 派生したリクエストと結果の応答時間への寄与との間の依存関係を確認します。
    • システムで最も遅いリクエストを見つけて分析します。

    ブロックには新しい子供、カモンもいます。これは、JVM 上で実行されるアプリケーションを監視するためのリアクティブフレンドリーなツールキットであり、Typesafe Reactive Platform で構築されたアプリケーションに特に熱心です。これは間違いなく Akka にとってイエスであることを意味し、統合はメトリックを収集し、ユーザーに代わってトレース コンテキストの自動伝播を実行するためのバイトコード インストルメンテーションをもたらすkamon-akkaおよびモジュールの形で提供されます。Akka 統合の概要kamon-akka-remoteから始めてドキュメントを参照し、Akkaでできることとそれを達成する方法を理解してください。

于 2015-10-08T20:58:32.407 に答える
5

本番アプリケーションの構築に Akka/Scala もよく使用するため、コードでのプロファイリング/メトリックについて考えていましたが、アプリケーションが正常であることを確認する別の方法についても知りたいと思っています。

  1. メトリクス (Dropwizard など)

GraphiteGangliaLogbackなどの優れたドキュメントと組み込みサポートを備えた、コードでメトリックを収集するための非常に優れたツール.

ゲージ、カウンター ヒストグラム、タイミングなどのアプリ内統計を収集するための詳細なツールがあります - アプリの現在の状態、作成されたアクターの数などを把握するための情報、アクターが生きているかどうか、現在の状態は何か出演者など多数。

プロファイリングとは少し異なりますが、特に char 構築ツールと統合されている場合は、問題の根源を見つけるのに大いに役立ちます。

  1. (VisualVM、XRebel) のようなプロファイラー

私は監視をするのがとても楽しいので、それはまだ少し異なる質問に答えます - 私のアプリケーションの現在の洞察は何ですか? しかし、私たちを悩ませる可能性のある別の問題があります - 私のコードのどの部分が遅い (またはずさんな) のでしょうか?

そのため、VisualVM と、この質問に対する別の回答があります。それは、VisualVM を使用して Akka アクターをプロファイリングする方法です。

また、XRebelプロファイラーを試してみることをお勧めします。このプロファイラーは、アプリを遅くするコードを特定するプロセスにもう少し火力を追加するだけです。これも有料ですが、私のプロジェクトでは、ずさんなコードを扱う時間を大幅に節約できました。

  1. ニューレリック

いくつかの監視/プロファイリング ソリューションを無料で入手できるため、一部のプレイグラウンド プロジェクトではこれをお勧めしますが、より深刻なプロジェクトでは、上記で強調したことを使用します。

私の概要がお役に立てば幸いです。

于 2015-10-12T21:11:06.677 に答える