[mayaa-user:996] SpecificationCacheのデータサイズを節約したい

Susumu ISHIGAMI [E-MAIL ADDRESS DELETED]
2014年 1月 22日 (水) 18:04:19 JST


石上です。

唐突な相談で申し訳ありません。

Mayaaを使用していると、
org.seasar.mayaa.impl.engine.SpecificationCache
というクラスにテンプレートのキャッシュが蓄積されていきます。

ヒープダンプを解析してみると、ここに蓄積されるデータ量は
数百KBのテンプレートファイルでも、1ファイル分で10MB以上になることがあり、
大量のテンプレートを使用しているWebサイトでは、
GB単位になってしまいます。。。

SoftReferenceを使用しているのでOutOfMemoryErrorになることはなく、
さらにアンロードされたとしてもpageSerialize機能が有効であれば、
.mayaaSpecCacheディレクトリにシリアライズされたデータが保存されているので、
再ロードするときのコストが最小限に押さえられます。

大変良く作られていますねw

では、あるのですが、やはりファイルからロードするとメモリにキャッシュされているよりは大分遅いですし、
ヒープのOldGenの大半を専有してしまうので、なるべく減らしたいのが心情です。。。
ヒープサイズが慢性的に多すぎるため、GCの発生頻度なども上がってしまい、システムの安定性を低下させてしまいますので、
消費量が少ないなら少ないように抑えたく思います。

そこで、なんとかキャッシュの容量を節約する方法はありませんでしょうか。
それが無理なら、ヒープの割上げ上限(出来れば空きヒープの%指定)が設定できると良いかと思います。

今のところ、キャッシュの容量は単にテンプレートファイルのサイズに依存するのではなく、
テンプレートでprocessorと紐付いているほど大きくなることを把握していますので、
「なるべく不要なm:id属性は記述しない」
「長期的に使わない箇所はコメントアウトではなくてテンプレートから消してしまう」
とテンプレート作成者に伝えています。


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