単純なメモリー・リークの検出
このトピックでは、Java™ アプリケーションのメモリー・リークについて説明し、単純なメモリー・リーク検出を紹介します。
Java アプリケーションには、組み込みガーベッジ・コレクション・メカニズムがあるため、プログラマーは明示的なオブジェクト割り振り解除を行う必要がなくなりますが、依然としてメモリー・リークは Java アプリケーションでよく見られます。メモリー・リークは、未使用のオブジェクトに対して意図しない参照が行われたときに、Java アプリケーションで発生します。 これが発生すると、Java ガーベッジ・コレクションはメモリーを解放できなくなります。
メモリー・リーク という用語は過剰使用されています。メモリー・リークは、メモリーの誤用または 誤った管理を指します。古い未使用データ構造には、未解決の参照がある可能性がありますが、 ガーベッジ・コレクションは行われていません。データ構造が限りなく成長する可能性があるか、 または、アプリケーションのセットが効率的に割り振られるのに十分なメモリーがない可能性があります。
既存のほとんどのメモリー・リーク・テクノロジーは、ユーザーがメモリー・リークの存在を認識し、 それを検出したいという考えを基にしています。これらの分析要件のため、 これらのテクノロジーは、パフォーマンスに大きな負担がかかっており、 実動で検出メカニズムとして使用するように設計されていません。この制限は、 問題が重大になるまで、メモリー・リークが一般的に検出されないことを意味します。 アプリケーションはすべてのシステム・テストを通過して、実動で使用されますが、 破損する理由は誰にも分かりません。
WebSphere® Application Server は、WebSphere パフォーマンスおよび診断アドバイザーのフレームワーク内で実行される単純なメモリー・リーク検出メカニズムを実装しています。このメカニズムは、テスト環境および実稼働環境でメモリー問題を初期検出するように設計されています。このフレームワークは、問題の原因を分析するように設計されているのではなく、 通知を提供し、分析ツールを使用するために必要な情報の生成に役立てるように設計されています。 このメカニズムは、Java ヒープ内のメモリー・リークのみを検出し、ネイティブ・リークは検出しません。
WebSphere Application Server における単純なメモリー・リーク検出には、追加のエージェントは必要ありません。 検出は、Performance Monitoring Infrastructure サービスから使用可能な情報を基にしたアルゴリズムに依存し、最小限のパフォーマンス・オーバーヘッドを持ちます。