質問

GlassfishサーバーにEJB3とJSFを備えたエンタープライズアプリケーションがあります。このアプリケーションを2週間以上実行した後、クラスの読み込みに問題があることに気付きました。これはpermgenの問題ではないと思います。クラスは、ページを開くたびにロードされましたが、メモリから消去されることはありませんでした。サーバーのメモリのスナップショットは次のとおりです。

スナップショット

したがって、この問題をデバッグする方法についてのポインタが必要です。

役に立ちましたか?

解決

この種のことが起こる理由の素敵な説明があります同様の問題の最近のアカウントこちら

jhat を使用すると、どのクラスがメモリを占有しているかを調べてから、それらを保持している可能性のある静的参照またはクラスローダーを探して、適切なアンロードを防止します。

他のヒント

アプリケーションをリロードしているようには見えませんが、これは明らかな答えです。本当にあなたはそれらのクラスが何であるかを知りたいです。

ReflectionとXSLT [C]はクラスを作成するための明らかなターゲットですが、これは信じられないほど規則的なようです。おそらく、何らかの方法でリークしている時間ベースのキャッシュがどこかにあると思われます。

JSF Webフレームワーク(MyFaces、ICEFacesなど)を使用している場合、これが問題になる可能性があります。特に、アプリケーションを再デプロイしていないという事実を考えますが、これはページを開いたり閉じたりするときに起こります。デバッグとプロファイリングをさらに行う前に、適切な課題トラッカーを確認することをお勧めします。

また、意図的に低いヒープスペースでローカルマシンにアプリケーションをデプロイし、アプリケーションのWebページをナビゲートするだけで、メモリリークを一貫して再現しようとすることができます。できれば、新しいクラスが読み込まれることになるアクションの種類を正確に理解できるようになります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top