[Seasar-user:13232] Re: Tomcat5.0.28 使用時のメモリ解放について
[E-MAIL ADDRESS DELETED]
[E-MAIL ADDRESS DELETED]
2008年 3月 11日 (火) 18:57:38 JST
大谷です。
■確認結果
いただいたスナップショットで動作確認を行ったのですが、残念ながら
メモリー解放されませんでした。
■検証内容
1.今までは[ SingletonS2ContainerFactory.destroy() }を呼び出していませんで
したので、
新規にListenerを作成して呼び出しを行うようにしました。(以下のように呼び
出しています。)
/**
* S2コンテナを破棄します。
* {@inheritDoc}
* @see
javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent)
*/
public void contextDestroyed(ServletContextEvent event) {
logger__.info("S2Containerを破棄します。");
SingletonS2ContainerFactory.destroy();
org.apache.commons.beanutils.PropertyUtils.clearDescriptors();
}
2.Web.xmlにListenerを設定しました。
3.JVMに以下のオプションを設定しました。
<jvm-options>
-verbose:class (クラスのロード・アンロードをログに出力するオプション)
-verbose:gc
4.アプリケーションを複数回デプロイし、ログを確認しました。
結果:
クラスのアンロードがほぼされません。
アンロードされるのは以下のログに出力されるようなクラスばかりで、当方で
作成したアプリケーションのクラスはアンロードされません。
[Full GC[Unloading class sun.reflect.GeneratedMethodAccessor116]
[Unloading class sun.reflect.GeneratedMethodAccessor83]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor42]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor38]
[Unloading class sun.reflect.GeneratedMethodAccessor123]
[Unloading class sun.reflect.GeneratedMethodAccessor121]
[Unloading class sun.reflect.GeneratedConstructorAccessor150]
[Unloading class sun.reflect.GeneratedMethodAccessor115]
[Unloading class sun.reflect.GeneratedMethodAccessor119]
[Unloading class sun.reflect.GeneratedConstructorAccessor142]
[Unloading class sun.reflect.GeneratedMethodAccessor117]
[Unloading class sun.reflect.GeneratedMethodAccessor82]
[Unloading class sun.reflect.GeneratedMethodAccessor125]
[Unloading class sun.reflect.GeneratedConstructorAccessor143]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor36]
[Unloading class sun.reflect.GeneratedConstructorAccessor147]
[Unloading class sun.reflect.GeneratedMethodAccessor124]
[Unloading class sun.reflect.GeneratedMethodAccessor122]
[Unloading class sun.reflect.GeneratedConstructorAccessor146]
[Unloading class sun.reflect.GeneratedMethodAccessor120]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor37]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor40]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor39]
[Unloading class sun.reflect.GeneratedConstructorAccessor149]
[Unloading class sun.reflect.GeneratedConstructorAccessor148]
[Unloading class sun.reflect.GeneratedMethodAccessor118]
74816K->73897K(237312K), 0.8084683 secs]
(Tomcat 5.5.17ではアプリケーションのクラスもアンロードされるログが出力さ
れています。)
5.さらにデプロイを繰り返しました。
結果:
最終的には[ java.lang.OutOfMemoryError: PermGen space ]が発生しました。
■今後の対応
今のところはWebOTXのサポートチームに原因調査を続行依頼することにしたいと
思います。
原因がわかりましたら、メーリングリストに投稿させていただきます。
今後、S2側で対応可能な方法が見つかりましたら教えてください。
ありがとうございました。
関連リンク:
http://blogs.boxysystems.com/2007/4/11/tomcat-v5-0-28-memory-leak-exposed
https://issues.apache.org/bugzilla/show_bug.cgi?id=26135
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/beans/Introspector.html
http://www.netbeans.org/issues/show_bug.cgi?id=46532
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5102804
Seasar-user メーリングリストの案内