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

suga [E-MAIL ADDRESS DELETED]
2014年 1月 22日 (水) 23:50:07 JST


suga です。

難しいですね……。

不要なprocessorを削るというのはすでにされているようなので、
あとは共通パターンをcomponentにすることで数を減らす、
物によっては独自processor(orカスタムタグ)を作ることでサイズを小さくできるものもあるかもしれません。

ファイルサイズは、現在は単純な serialize なので Zip してしまえば小さくなるでしょうけど、
その分 serialize / deserialize は遅く重くなるのでトレードオフですね。


早めにメモリから解放されるようにするには、engineのパラメータ surviveLimit を小さくする方法があります。
これはGC の解放命令を何回無視するかという回数なので heap サイズとは直接関係ありませんが、
空き heap を優先させるなら小さくしてみて効果があるか試すのも手でしょう。
デフォルトは 5 です。

処理は
org.seasar.mayaa.impl.engine.SpecificationCache
にあります。


--
suga ( ko.suga @ gmail.com )


2014/1/22 Susumu ISHIGAMI <susumu.ishigami @ gmail.com>:
> 石上です。
>
> 唐突な相談で申し訳ありません。
>
> Mayaaを使用していると、
> org.seasar.mayaa.impl.engine.SpecificationCache
> というクラスにテンプレートのキャッシュが蓄積されていきます。
>
> ヒープダンプを解析してみると、ここに蓄積されるデータ量は
> 数百KBのテンプレートファイルでも、1ファイル分で10MB以上になることがあり、
> 大量のテンプレートを使用しているWebサイトでは、
> GB単位になってしまいます。。。
>
> SoftReferenceを使用しているのでOutOfMemoryErrorになることはなく、
> さらにアンロードされたとしてもpageSerialize機能が有効であれば、
> .mayaaSpecCacheディレクトリにシリアライズされたデータが保存されているので、
> 再ロードするときのコストが最小限に押さえられます。
>
> 大変良く作られていますねw
>
> では、あるのですが、やはりファイルからロードするとメモリにキャッシュされているよりは大分遅いですし、
> ヒープのOldGenの大半を専有してしまうので、なるべく減らしたいのが心情です。。。
> ヒープサイズが慢性的に多すぎるため、GCの発生頻度なども上がってしまい、システムの安定性を低下させてしまいますので、
> 消費量が少ないなら少ないように抑えたく思います。
>
> そこで、なんとかキャッシュの容量を節約する方法はありませんでしょうか。
> それが無理なら、ヒープの割上げ上限(出来れば空きヒープの%指定)が設定できると良いかと思います。
>
> 今のところ、キャッシュの容量は単にテンプレートファイルのサイズに依存するのではなく、
> テンプレートでprocessorと紐付いているほど大きくなることを把握していますので、
> 「なるべく不要なm:id属性は記述しない」
> 「長期的に使わない箇所はコメントアウトではなくてテンプレートから消してしまう」
> とテンプレート作成者に伝えています。
> _______________________________________________
> mayaa-user mailing list
> mayaa-user @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/mayaa-user


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