[Seasar-user:6403] tomcatでコンテキストが開放されない?

Takuya UESHIN [E-MAIL ADDRESS DELETED]
2007年 2月 28日 (水) 11:01:33 JST


こんにちは。
うえしんといいます。

現在進行しているプロジェクトにおいて、
tomcat上でのコンテキスト入れ替えを繰り返すことで

  java.lang.OutOfMemoryError: PermGen space

が頻発してしまっており、原因を探るべく調査を行っておりました。

その際に気になった点がありましたので、ご報告させていただきます。


まず添付のEclipseプロジェクト(sample.zip)をご確認いただきたいのですが、
こちらにはコンポーネントを全く登録していないapp.diconを利用して
S2ContainerServletがロードされるwarプロジェクトとなっています。

こちらをtomcat上に配備、コンテキストが登録された後、
tomcatを起動させたままコンテキストの配備解除を行うと、
s2-containerのjarファイルだけが削除できない状態となってしまいます。
load-on-startupをコメントアウトし、S2ContainerServletがロードされなければ、
全てのファイルが開放され、削除できるようになります。

削除できないのはコンテキストが完全に開放されていない状態だと思われます。

こちらのサンプルはSeasar2.3.17を利用していますが、
Seasar2.4.10でも同様の現象となっていました。


このことについていろいろ調べてみまして、怪しい点を発見しました。
(調査対象は現在利用しているSeasar2.3.17とさせていただきました。)

org.seasar.framework.xml.SaxHandler(リビジョン1812)の84行目にて
jarファイルからリソースを取得しているのですが、
こちらが開放されていないのではないでしょうか。
(読み込んでいるのはs2-container.jar内のdtdファイルです。)

ここで取得しているリソースが開放されるよう、
暫定的に添付ファイルdiff_SaxHandler.txt、diff_ResourceUtil.txtにように
修正することで、S2ContainerServletをロード、配備解除を行っても
ファイルの削除ができるようになることを確認しました。
ResourceUtilの修正はURLConnectionのキャッシュを避けるためです。
これを入れなければ開放されませんでした。


こちらの環境/設定依存、もしくは思いっきり勘違いかもしれませんが、
ご確認いただけますでしょうか。

ちなみにこちらの環境は、
  WindowsXP
  java version "1.5.0_11"
  apache-tomcat-5.5.20
  Eclipse3.2
となっています。


よろしくおねがいします。

-------------- next part --------------
文字コード指定の無い添付文書を保管しました...
名前: diff_SaxHandler.txt
URL:  http://ml.seasar.org/archives/seasar-user/attachments/20070228/46140d6f/attachment.txt 
-------------- next part --------------
文字コード指定の無い添付文書を保管しました...
名前: diff_ResourceUtil.txt
URL:  http://ml.seasar.org/archives/seasar-user/attachments/20070228/46140d6f/attachment-0001.txt 
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: sample.zip
型:         application/x-zip-compressed
サイズ:     3847 バイト
説明:       無し
URL:        http://ml.seasar.org/archives/seasar-user/attachments/20070228/46140d6f/attachment.bin 


Seasar-user メーリングリストの案内