iBATISはどのくらいメモリを使うのか(3)

iBATISはどのくらいメモリを使うのか(2)」の方法に従って、iBATISを用いたアプリケーションがどのくらいヒープ領域を使うのかを調べてみた。
結果は、次の表の通り。要は、2000テーブルで、600MBくらいのヒープ領域を使うってこと*1



いくつか、留意点を。

  • 32bitのOSを用いている。64bitの場合には、2倍とはいかないまでも、、そのくらい見たほうがよいと思う
  • SQLマップファイルは、1ファイルあたり20KB程度*2。2000テーブルなので、ファイルサイズは40MB程度
  • Javaの起動オプションは、初期ヒープサイズを512MB、最大ヒープサイズを1024MB*3にしている
  • 2回測定したが、メモリ使用量はほぼ変わらず。グラフは、2回目の測定値。複数回測定して、平均したわけではない
  • 「retained heap」とは、オブジェクトのツリーが直接使っているヒープ領域。前回の最後に紹介した通り


細かいところを簡単にコメントしておく。
1番目の線「ヒープ領域」は、JVMが確保したヒープ領域のサイズ。512MBから1024MBになっていて、わかりやすい。
2番目の線「ヒープ領域の使用サイズ」は、JMXで監視した得た、使用されているヒープ領域のサイズ。1500テーブルや2000テーブルの場合に比べて、1750テーブルや2250テーブルの方が、使用サイズが小さい。これは、確保しているヒープ領域がおさえられており、GCの走り方が違うから起きるっぽい(実はGCログもとっていて、見てみた)。もし、初期ヒープサイズが2048MBであれば、線形になると思う。
3番目の線と4番目の線は、MATで得た「retained heap」の情報だが、、図ったようにきれい。


仮に、64bitのOSであれば、2000テーブルで1GBくらいヒープ領域を使うということか。少なくとも、最大ヒープサイズを3GBくらいに設定しておかないとダメそう。さらに、SQLマップファイルが大きくなれば、その分メモリを使うことになるので、、それでも最大ヒープサイズを4〜6GBくらいにしておけば十分。

教訓: 「テーブル数が多い+iBATISを使う」案件*4では、メモリをケチらずに、大量*5に買っておこう

この調査は、ひとまずこれでおしまい。
さぼってたからw、長くかかったなぁ。文字コードの話も、完結させないと。。

*1:やっぱ、こんなもんだよな。。

*2:Ibatorを拡張せずに使うと、この程度。

*3:PCが非力(2GBしかメモリを搭載していない)で、これが限界。

*4:特に、テーブル間に関連があって、スケールアウトが難しい場合。

*5:規模にもよるが、16GBとか32GBとか。かつスケールアップできるようにしておくとよい。