はちょうど私達はたくさんのを持っているのEclipseLink 2.5.xのメモリリーク、ChangeTracking JPA、Glassfishの3.1は、EclipseLinkは2.5
とGlassfishの3.1.2上で動作するJava EEアプリケーションに大きなメモリリークを見つけるのに苦労してデータベース内のユーザよりもメモリ内のユーザエンティティのインスタンスが多くなります。 そして、永続性機能の変更の追跡は、各ユーザーごとに8 MBで狂っています。 最後に2 MB以上のものを2 GB以上消費します。
誰かがこのようなことが起こる可能性がありますか?
小さなアプリケーションで再現しようとしましたが、同様の現象はありませんでした。
このプロファイルは、すべてを保持するUserCacheクラス(その内容とその理由)を示しています。あなたはどのようにユーザーオブジェクトをキャッシュしていますか? – Chris
遅れて申し訳ありません。私の顧客は、Google guaveキャッシュを使用していくつかの情報へのアクセスを高速化しようとしています。 1つの間違いは、@Entitiesをキャッシュに入れることです。どうやら、entitymanagerとguaveキャッシュは、それらのオブジェクトを永遠に記憶しています。しかし、それは2.5 GBであってはなりません。合計で14000ユーザーしかありません。なぜ私は変更の追跡が非常に巨大なのか分かりません。データは変更されません。 –
私はあなたのチェンジトラッキングのインスタンス自体がそれほど多くのメモリを保持しているとは思いません。あなたは、変更トラッカーが保持しているものを正確に突き止めていませんでした。それはコンテキストへのリンクを持っているかもしれません、そして、メモリの大部分を保持するコンテキストかもしれません。コンテキストは、それを介して読み込まれたすべてのエンティティを保持するため、すぐに追加できます。 – Chris