サーバー アプリケーションでパフォーマンスの問題 (Hi-CPU) が発生しました。ただし、この問題は、サーバーが長時間 (平均で 1 週間) 実行されている場合にのみ発生します。問題を診断するために Netbeans 組み込みのプロファイラーを使用しようとしましたが、数時間実行した後、単に応答を停止しました。
アプリケーションの長期監視を実行する方法はありますか? ありがとう。
更新: これは Web アプリケーションではありません
サーバー アプリケーションでパフォーマンスの問題 (Hi-CPU) が発生しました。ただし、この問題は、サーバーが長時間 (平均で 1 週間) 実行されている場合にのみ発生します。問題を診断するために Netbeans 組み込みのプロファイラーを使用しようとしましたが、数時間実行した後、単に応答を停止しました。
アプリケーションの長期監視を実行する方法はありますか? ありがとう。
更新: これは Web アプリケーションではありません
まだVisual VMを調べていない場合 (JDK 6 update 7 以降を使用している場合) は、 Visual VM を調べてください。JavaコアへのNetbeansプロファイラーの「適応」であるため、非常に快適になると確信しています。
過去にパフォーマンスロギングにperf4jを使用して、ボトルネックを見つけました。
Compuwareから、 DynaTraceと見なすことができる商用製品があります。私はCompuwareで働いたことがなく、Compuwareで働いたこともありませんが、現在の組織では現在、本番環境でDynatraceを使用することを検討しています。
実行しているJavaアプリケーションのタイプに応じて、デスクトップベースかサーバーベースかに応じて、インストールによってクラスパスにjarが追加されます(さらに、ネットワークにネットワークアプライアンスが追加されます)。アプリケーションを実行すると、インストルメンテーションデータがDynatraceサーバーに送信され、そこで取得できます。さらに、システム全体で個々のユーザーパスとトランザクションをトレースすることもできます(使用するテクノロジーに関係なく)。
Dynatraceは、特定の問題を診断したいときだけでなく、常に実行したままにしておくことを想定しています。また、Dynatraceは安価ではありません。サーバーあたり5桁のコストを見ていると思いますが、私が見たところ、永続的に実行されているデバッガーのように機能しているように見えますが、パフォーマンスが大幅に低下することはありません(< 5%)。
実行しているアプリケーションの種類は正確にはわかりませんが、私たちのアプリケーションはJava EEベースのWebアプリケーションであり、一部のバックエンドサーバーとインターフェイスします。
HTH
私はプロファイリング ツールについてよく知らないので、プロファイリング ツールを推奨するつもりはありません。
代わりに、AspectJを使用してロギング ( Log4j ) ステートメントをコードに挿入します。監視したい特定の領域を認識している場合は、それらの特定のポイントカットにログを挿入するだけです。それ以外の場合は、すべてを見たい場合は、ポイントカットを一般化して全体に注入できます。
ログを 1 週間収集し、「不規則」に動作している可能性があるものを探します。これらのログ ファイルは、何をログに記録するかによってかなり長くなる可能性があるため、ファイル解析を使用して次のような情報を収集する必要がある場合があります。
これらの数値を週の初めから、パフォーマンスが低下したときの数値と比較してください。顕著なパフォーマンス ヒットが発生している場合、これらはこの種のログ ファイルにかなり明確に反映されると思います。
これは、すぐに使用できるプロファイリング ツールを実行するよりも少し手間がかかるかもしれませんが、非常に柔軟であり、これまで AspectJ をあまり使用したことがない場合は、良い学習体験になる可能性があります。