[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 メーリングリストの案内