私は、多くの Java、SQL スクリプト、JS、AJAX を含む J2EE Web プロジェクトに取り組んでいます。プロジェクトがまだ正常に実行されているのは5年です。
いくつかのメモリ使用の問題、DB フェッチ ロジックの遅延、およびその他の同様の弱いパフォーマンス領域がある可能性があるため、プロジェクトのパフォーマンス評価の作業を割り当てました。どこから始めればよいですか?
プロジェクトを改善するためのベストプラクティスはありますか?
私は、多くの Java、SQL スクリプト、JS、AJAX を含む J2EE Web プロジェクトに取り組んでいます。プロジェクトがまだ正常に実行されているのは5年です。
いくつかのメモリ使用の問題、DB フェッチ ロジックの遅延、およびその他の同様の弱いパフォーマンス領域がある可能性があるため、プロジェクトのパフォーマンス評価の作業を割り当てました。どこから始めればよいですか?
プロジェクトを改善するためのベストプラクティスはありますか?
最善の方法は、ボトルネックがどこにあるかを測定することです。そのような作業には jprofiler などが必要です。
通常、誰かがシステムパフォーマンスの改善にお金を払うとき、彼/彼女が満足していないことをほとんど正確に知っています. そのため、まず問題のリストを作成します。システムが「遅い」という事実は問題ではありません。なぜなら、「遅い」というのは常に何か「速い」(システムが入ってくるトラフィックについていけないなど) に関連しているからです。リストを作成したら、「遅い」コンポーネントを大まかに特定します。次に、ロギングを行います (各メッセージにミリ秒単位のタイムスタンプがプレフィックスとして付けられていることを確認し、必要に応じてロガーを再構成します)。「遅い」操作についてログに記録されているもの、システムが各コンポーネントで費やした時間を確認してください。遅いコンポーネントを大まかに特定したら、この特定のコンポーネントのログの詳細度を上げて、何が問題なのか (遅い DB、貧弱なコードなど) を突き止めます。
システムを高速化する必要があるだけの場合は、最大負荷で実行されているプロセスで「jstack」を繰り返し実行することで、最適化する最初の場所を見つけることができます (この方法を「モンテカルロ プロファイリング」と呼ぶ人もいます)。後続のスタック ダンプを比較することで、アプリケーションが統計的に最も多くの時間を費やしている場所を特定し、対応するブロックを改善できます。
また、jconsole を使用して実行中のプロジェクトに接続し、ログ ファイルを調べてメモリの消費量を追跡し、誰が最も多くのメモリを割り当てているかを調べることも役立ちます。