「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くらいにしておけば十分。
この調査は、ひとまずこれでおしまい。
さぼってたからw、長くかかったなぁ。文字コードの話も、完結させないと。。