2010-11-18 13 views
4

ここに私の問題があります:Apache Cassandraをデバッグしようとしていて、アプリケーションの流れを理解しようとしています。私。要求がクライアントによって送信されたとき、put()、呼び出されるメソッド、およびシステムが内部的にどのように動作しているかなど。大規模サーバー側分散型Javaアプリケーションのデバッグ方法

  1. は、日食などなどOR
  2. ドン」にブレークポイントを入れて、エントリプット()メソッドのポイントを呼び出しますカサンドラコードでmainメソッドを書く:

    だから、ここは私が考えているものですlog4jロガー(すでにcassandraに実装されている)を使って、通常のクライアント(TCP経由でサーバにアクセスする)と「デバッグ」(ログファイルを読み、コードを理解すること)を使用するだけです。

私の質問は、このような分散アプリケーションをデバッグする理想的な方法は何ですか?

答えて

3

理想的な方法ですか?両方、そしてもっと。

"デバッグ"と "アプリケーションの流れを理解する" - あなたがフローを理解する前にデバッグするのは非常に難しいですが、理解はそれ自体で終わるかもしれません。

現実の世界では、大規模な分散システムを扱う際には、デバッガに頼ることはまずありません。何か問題は、システムがビジー状態であったり、何時間も実行されたときにだけ表示されるためです。したがって、アプリケーションコードとインフラストラクチャコードでは、優れたデバッグトレースとそのトレースに対するきめ細かな制御が不可欠です。

しかし、あなたは非常に照らすことができるデバッガで実行する機会があれば。そのすべての前に

私はあなたがする必要があると思う:

A)。存在するかもしれない設計文書を調べる。

b)。良いIDEのソースコードを参照してください。 Eclipse。ちょうどコントロールに従ってください。うーん、ここに興味深いビットがあり、それはどこから呼び出されるのだろうか?クラスのメソッドに呼び出すと、それはどうしますか?そのコンストラクタはいつ呼び出されますか?

あなたの頭の中にあるものをいくつか挙げておくと、トレースがはるかに簡単になり、どこにブレークポイントを置くのが良いか分かります。

+0

開発環境について話していますか?アプリがプロダクションで実行されているかどうかは関係ありません。私の目的は、cassandraの既存のプロトコルを書き直すことです。 – zengr

+0

実際には、フローの印象を持ち、予想されるログメッセージが生成されていることを確認することが最善です。デバッガを起動するだけで詳細に陥ることがあり、大きな画像(フローなど)についてのヒントはありません。ただし、特定のコードにデバッガをアタッチすることで、期待通りの結果が得られない場合があります。 – extraneon

+0

+ eclipseでリモートデバッグが見つかりました。それも助けになるだろうか? – zengr

0

log4jのMDCを使用して、put()の直前に設定してから、put()が終了した後に消去するのはどうですか? put()の中で実行されるメソッドに他のログが設定されていれば、そこで実際に何が起こったのかを見ることができます。その方法で深いの場合は、スタックトレースをログしてから現在の位置を確認してください。

免責事項:私のデバッグの優先順位リストは、このように書きます:

  1. スタックトレース
  2. デバッガを使用したログファイルを調べて調べて

ので、1と2の場合はドン私に答えを与えないで、私はデバッガに頼るでしょう。

このような分散アプリケーションでは、デバッガを使用するのが最後の手段のように思えます。

0

分散アプリケーションでのロギングを使用することは、実際にはどのようなことが起こっているのか、物事がどのように相互作用するかを理解する最良の方法の1つです。しかし、最終的にはログファイルの問題に直面するでしょう。分散システムはさまざまな形式や場所で多くのファイルを生成することができます。ですから、このようなものにlog4j(または同様のもの)を使用したい場合は、ログを1つの場所に集約して調べる必要があります。 This toolは、永続的な集約だけでなく、さまざまなソースからの集約されたログ・ストリームのリアルタイム・モニタリングも可能にします。たとえば、特定のホスト(またはホストの範囲)からのデータレイヤに焦点を当て、進行中のことをリアルタイムで観察できます。あるいは、特定のマシン上の特定のスレッドからログを取得したり、以前のポスターですでに述べたようにMDCコンテキストを使用したりすることもできます。私はまた、分散アプリケーションのデバッガはほとんどの時間役に立たず、明らかな理由から本番システムでは全く役に立たないという見解に加入しています。一方、Log4jは信じられないほど柔軟性があり、広く使われており、ロギングのための最良のツール(IMHO)の1つです。

0

ログを使用し、必要に応じてログレベルを上げ、さらにログステートメントを追加します。分散システムのさまざまなコンポーネントで、データベース、アプリケーションサーバー、スタックトレースの分析、フロントエンドブラウザでのデバッグツールの使用、Webアプリケーションとバックエンドブレークポイントの組み込みなどのさまざまなコンポーネントのプロファイリング

関連する問題