私は非常に大きなJavaアプリケーションを持っています。これはTomcat上で動作し、典型的なSpring/Hibernate Webアプリケーションです。これはまた、非常に大きなJavaプログラムです。これらを別々に実行できるので、データベースクエリのパフォーマンスをテストするのは簡単ですが、このようなスタック上でJavaのボトルネックを探すことはできません。私はEclipseのTPTPプロファイラを試しましたが、実際に私のプログラムが気に入らないようでしたが、私のプログラムが大きすぎると思われます。誰も大規模なwebappのプロファイリングに関するアドバイスを持っていますか?非常に大きなJava Webアプリケーションをプロファイルするにはどうすればよいですか?
答えて
現在、JDKに付属のプロファイラは、実行中のプロセスにアタッチすることができ、少なくともパフォーマンスの初期概要を提供することができます。これは、Netbeansプロファイラに基づいています。
jProfilerを試してください。 Tomcat
私はこれを行う簡単な方法を見つけたことはありません。なぜなら、一般的にそれほど多くのことが起こっているため、全体像がはっきりしないからです。 Hibernateのようなものでは、たとえあなたのアプリケーションが実際に何かをしていないとしても、キャッシュされたデータのメモリを大量に取得することが正しい動作である可能性があるため、実行する別のメモリ非効率なプロセスがプロファイリングに陥る可能性があります。
メモリ、速度、または一般的に性能の低いものをプロファイリングしていますか?孤立していると思われるプロセスをテストしてみてください。確かにずっと簡単です。
JProbe、JProfiler、両方とも、無料のデモがあります。 IDEの中でテストすることはメモリの問題を複雑にし、私は気にしないほうが簡単だとわかりました。
私たちのアプリケーションは、許容できるパフォーマンスのパラメータ内で動作していますが、私が対象とする明らかなボトルネックがないかどうかを見てみたいと思います。私はそれがあなたがそれが期待される場所ではないと聞いています。 –
Try this.予想よりも簡単かもしれませんが、機能します。
Try JProfilerそれは試用ライセンスを持っており、それは非常にフル機能です。
- があなたのjavaコマンド
- スタートサーバー
- スタートJProfilerを上のプログラムに引数としてJProfilerをエージェントを追加し、選択し、「アプリケーションの実行への接続を:にそれを使用するには、必要がありますリモートで」
- はそれをポート番号を与え、どんなホスト、それは
で実行されているこれらのすべては、JProfilerを付属の説明書であるが、重要な部分は、あなたがyにホストとポートを介して接続しますということです私たちの実行アプリ。
何をプロファイルすれば、大量のデータセットを読み込んだり、ソートしたり、間違っていると単純なネットワークI/Oでさえも、メモリ/ CPUを集中的に使用することができます。これらのことを実行します(サーバ上で動作するスクリプトを使用して負荷テストを自動化し、JProfilerでスナップショットを収集することができれば嬉しいです)。
あなたの余暇でグラフを表示します。 CPU監視をオンにして、CPUサイクルの使用場所を監視します。各メソッド呼び出しでパーセンテージで絞り込むことができるため、ソースを持つメソッドで1〜2%のCPUを使用している場合は、調査を行い、CPU集約度を下げることができるかどうかを確認してください。
同じことがメモリになります。すべてのCPUプロファイリングを無効にし、すべてのメモリプロファイリングを有効にし、テストを再度実行してスナップショットを取得します。
リンス、繰り返し。
また、メモリ管理とガーベッジコレクションについて読むときにこの時間がかかる場合もあります。あなたが既にプロファイリングしているときよりもガベージコレクションをチューニングするのに良い時期はありません。http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html
eden/survivorオブジェクトプロモーションの部分に特に注意してください。 Webアプリケーションでは、短命のオブジェクトがたくさんあるので、若い世代を増やすことは、しばしば年を取っている世代を犠牲にして行います。
私はYourKitを使用して8 GBのヒープを持つアプリケーションをプロファイリングしました。
チェックJAMon。これはプロファイラーではありませんが、推奨できるプロファイリングのための最良のツールです。バネとの統合は非常に簡単です。私たちはテスト環境とライブ環境でそれを使用します。
- 1. 非常に大きなウィンドウにGoogleマップを表示するにはどうすればよいですか?
- 2. C#で非常に大きな辞書を使用するにはどうすればよいですか?
- 3. .NETで非常に大きな整数を表現するにはどうすればよいですか?
- 4. Webアプリケーション - ローカルファイルに非常に大きなデータストリームを保存する
- 5. ノードjで非常に大きな数値を扱うにはどうすればよいですか?
- 6. 非常に大きなcsvファイルを検索するにはどうすればよいですか?
- 7. NSTableViewに非常に大きなCoreDataストアを扱うにはどうすればいいですか?
- 8. Javaでスレッドをプロファイルするにはどうすればよいですか?
- 9. Chart.js:レーダーチャートで非常に大きな値と非常に小さな値を扱うにはどうすればよいですか?
- 10. Java:ファイルに非常に大きな数字(10億桁など)を出力するにはどうすればよいですか?
- 11. NetBeansでは、「Javaアプリケーション」プロジェクトを「Webアプリケーション」プロジェクトに変換するにはどうすればよいですか?
- 12. JAVAで非常に大きなファイル(4GBと言う)を効率的に読み込むにはどのようにすればよいでしょうか?
- 13. 非常に大きなCSVファイルをどのようにソートできますか?
- 14. 非CMS WebアプリケーションをSitefinity管理対象アプリケーションに変換するにはどうすればよいですか?
- 15. Matlabで非常に大きなArrayを複数回読み取らないようにするにはどうすればよいですか?
- 16. JavaからJSPへ - JavaアプリケーションをJSP Webページに統合するにはどうすればよいですか?
- 17. 管理プロファイルと通常プロファイルで実行されているAndroidアプリケーションを区別するにはどうすればよいですか?
- 18. Webアプリケーションでドキュメントをプレビューするにはどうすればよいですか?
- 19. 非常に大きなリストビュー項目を処理するにはどうすればよいですか? switch文またはif/else文によるか?
- 20. 大きなファイル(> 25MB)をWebサービスにアップロードするにはどうすればよいですか?
- 21. 信頼できないJavaアプリケーションを安全に実行するにはどうすればよいですか?
- 22. 大きなデータセットをインポートするにはどうすればよいですか?
- 23. Javaアプリケーションから大量のバッチインサートをMySQLに最適化するにはどうすればよいですか?
- 24. Java EEアプリケーションをWebホスティングなしでオンラインにするにはどうすればいいですか?
- 25. Sinch SDKは非常に大きいようです@ 199kb
- 26. 複数のサーバーで大規模なWebアプリケーションを構成するにはどうすればいいですか
- 27. 非常に大きなラベルの付いていないNLPデータセットにFreebaseを使用してラベルを付けるにはどうすればよいですか?
- 28. MonoTouchアプリケーションをプロファイルするためにInstrumentsを起動するにはどうすればよいですか?
- 29. Webアプリケーション経由で大量の履歴データをページするにはどうすればよいですか?
- 30. JavaアプリケーションでXSS攻撃をブロックし、ユーザーがWebページ上でJavaScriptを実行できないようにするにはどうすればよいですか?
Visual VMはSun JVMで最も効果的です。元のAskerが別のJVMマジックを使用する場合は、Visual VMが実行中のプロセスを見て接続できるようにする必要があります。 –