4

How do you build a AppDynamic or New Relic kind of system that collects performance metrics of your application including detailed call tree stats by merely installing a software on the servers where your application runs?

Is it even possible to collect such metrics without compiling your apps with debug information?

What are the performance trade offs to consider when building such a service? How do such software minimize the performance impact they themselves might be having on the application.

4

2 に答える 2

10

AppDynamics と New Relic はどちらも標準 BCI を使用して、開発者がアプリケーション (サーブレット、ストラット、SOAP、JMS、JDBC など) を構築するために使用する一般的なインターフェイス (エントリ ポイントとエグジット ポイント) を監視します。これにより、実行されるコードの 5% 未満を表すタイミング情報を使用して、コード実行の基本的なスケルトン (コール グラフ) が提供されます。

その秘訣は、本番環境の JVM であまりオーバーヘッドを発生させずに、スローダウン中に残りの 95% のコード実行のタイミングを明らかにすることです。AppDynamics は、インメモリ エージェント分析と Java API 呼び出しを組み合わせて使用​​し、残りのコード実行をリアルタイムで抽出します。これは、カスタム インストルメンテーションが不要であること、または監視ソリューションでインストルメントするクラス/メソッドを明示的に宣言する必要がないことを意味します。

AppDynamics のデータ収集は、New Relic のデータ収集とは大きく異なります。たとえば、AppDynamics を使用すると、リクエストの集約ではなく、特定のユーザー リクエストに対して複数の JVM にわたる完全な分散コール グラフを取得できます。

BCI は最近の商品です。違いは、ベンダーが使用する診断/コール グラフ情報をトリガーする分析とアルゴリズムにあるため、問題を解決するために適切なタイミングで適切な可視性を得ることができます。

スティーブ。

于 2013-07-02T05:52:04.220 に答える
6

これらの製品が一般的に機能する方法は、一般的に使用されるライブラリとメソッドに対してバイトコード インジェクション / 関数の挿入 / モンキー パッチを適用することです。たとえば、JDBC クエリ メソッド、サーブレット基本クラス、および HTTP クライアント ライブラリにフックできます。リクエストがアプリケーションに入ると、それが行うすべての重要なメソッド/呼び出しを追跡し、何らかの方法でログに記録します。データを取得して、分析、チャート、アラートに加工します。

さらに、統計プロファイリングやその他のオプションを追加することもできます。

注意が必要なのは、プロセスの境界を越えてリクエストを追跡し、収集する大量のパフォーマンス データを処理することです。(私は AppNeta でこの問題に取り組んでいます)

確認すべきことの 1 つは、Twitter Zipkin ( https://github.com/twitter/zipkin ) です。これは、あまりサポートされておらず、かなり初期段階ですが、興味深いプロジェクトです。

于 2013-07-02T02:56:59.617 に答える