Web アプリケーションの運用メモリ リークを診断しようとしています。このアプリケーションは、Tomcat 7 および mySQL で実行される GWT アプリであり、Debian では OpenJDK 1.6.0_18 です。
私は tomcat を起動し、アプリを数日間リークさせました (アプリのリロードはありません)。その後、ヒープ ダンプを取得して Eclipse MAT プラグインで開きました。私は自分が見ているものを理解しようとしています。tomcat の loggin クラスから大量のメモリが保持されているようです (下のスクリーンショットを参照)。
Java ロギング フレームワークを使用して、GWT サーブレットで基本的なロギングを行います。のような基本的な呼び出し
Logger.getAnonymousLogger().log(Level.INFO, "User" + userId + " did something interesting");
Logger.getAnonymousLogger().log(Level.SEVERE, exception.getMessage(), exception);
これと同様の問題を Web で見つけたのは、このブログ投稿だけでした。
ここで何が起こっているのか、誰か説明できますか? tomcat ロギング クラスが大量のメモリを保持しているのはなぜですか?
さらに私を混乱させるために、それは大量の弱い参照を保持しているようです-しかし、MATでそれらの弱い参照が何を指しているのかを見つける方法を理解できないようで、弱い参照も期待できますヒープ制限に達したときに収集されますが、代わりに tomcat がメモリ不足の例外をスローします。