0

Tomcat 7 を数日間使い始めました。私はそれを使って多くのJAVA BASED Webアプリケーションを実行しようとしました。実際に Java ベースの Web アプリケーションのフローを確認したいと考えています。これは、Web アプリケーションのメソッドがどの順序で実行されるかを意味します。これを行うには、Tomcat サーバーを Java プロファイラーでプロファイリングします。

私のプロファイラーは次のように機能します。

  1. アプリケーションの war ファイルを tomcat の web Apps ディレクトリにデプロイします。
  2. サーバーを起動します./startup.sh
  3. ブラウザでアプリケーションにアクセスして実行します。
  4. でサーバーを停止します./shutdown.sh

サーバーを停止した後、プロファイラーは出力を xml 形式でダンプします (コンテキスト ツリーの呼び出しとしてメソッドの階層を示します) (私のプロファイラーは基本的に Java クラスのメソッドをプロファイルします)。

ご存知のように、Tomcat はサーブレットに基づいているため、アプリケーションをまったく同じように 2 回実行すると (上記の 4 つの手順を 2 回実行し、2 つの同じ実行に対して 2 つの異なる出力が得られます)、プロファイラーは異なる出力を返します。Q.1) なぜこのようなことが起こるのか正確にはわかりませんが、その背後にある理由を知りたいと思っています。

また、単純なアプリケーションでも、出力は非常に大きくなります (約 200 MB)。出力のサイズを制限し、2 つのまったく同じ実行で同じ出力を得るために、プロファイリングから org.apache.* のメソッドを除外しました。最終的には、Web アプリケーション自体のフローを知ることに関心があるためです (Web アプリケーションのメソッドがどの順序で実行されるかを知るため)。このシナリオでは、次の質問があります。

Q.2) war ファイルをデプロイしてアプリケーションを実行し、ディレクトリ自体からフェッチして実行すると、プロファイラーの出力に違いが生じる可能性がありますか? または、両方のケースで実行される一連のメソッドに影響を与えることができますか?

Q.3)アプリケーションの jsp ページを実行するとどうなるか教えてください。つまり、Tomcatはそれらをどのように実行しますか? 一歩進んでください....

Q.4)アプリケーションの実行後にプロファイラーの出力を確認すると、org/eclipse/jdt/internal/... から多数のメソッドが実行されていることがわかります。では、このクラスは実際に何をするのでしょうか? 出力にそれらがあるのはなぜですか?

質問を説明できていない場合はお知らせください。よく検索しましたが、質問に対する正確な答えを見つけることができませんでした。

私は本当にあなたの応答をいただければ幸いです..

ありがとうございます。

4

1 に答える 1

0

Tomcat の動作について少し読むことを強くお勧めします。要するに

Q.2違いはありません。

Q.3 JSP は、呼び出されるとサーブレット クラスにコンパイルされます。JSP tomcat のサーブレット クラスがない場合は作成します。対応するサーブレット クラスがある場合、Tomcat は JSP とサーブレットのどちらが新しいかを調べます。JSP が新しい場合は新しいコンパイルを行い、そうでない場合はサーブレットを使用します。

Q.1 よくわかりません。マルチスレッド/タイミングの問題である可能性があります。おそらく、プロファイラーの動作方法です。

Q.4よくわかりません。サーブレット コードで使用されるプロファイラまたはライブラリのクラスでしょうか?

編集: Q.4については、質問に対する Ian Roberts のコメントを参照してください。

どのプロファイラーを使用していますか? コードをデバッグして段階的に進めてみてはどうでしょうか。

于 2012-09-06T13:20:13.877 に答える