TomcatとEclispeで「OutOfMemoryError」が出た場合の対処法

Eclispeを起動して、Tomcatを起動したら「java.lang.OutOfMemoryError」が出ました。
TomcatエンジンはJavaVMを利用していますが、
ある閾値のメモリを確保できない場合にこのエラーが発生します。
JavaVMが確保可能なメモリ領域は起動する際に最大値が決まっていて、
それ以上はマシンのメモリの空きに余裕があっても使えないみたいです。
対処法として下記のような設定をします。

Eclispeの「サーバー」ビューをダブルクリックして、「概要」画面を開き、
「起動構成を開く」のリンクをクリックします。
「構成の編集」画面が開いたら、「引数」タブを選択し、
VM引数(G)」のテキストエリアで、下記を追加します。

-server -Xmx256m -Xms256m -XX:MaxPermSize=96m


Eclipseで「java.lang.OutOfMemoryError」が出て落ちた場合は、
プラグインやプロジェクトが多いと発生する可能性があります。
対処法として下記の設定をします。
Eclipseのインストールしたディレクトリ\eclipse.ini」をテキストエディタで開き、
「-Xms」や「-Xmx」の値を大きくします。

 -showsplash
 org.eclipse.platform
 --launcher.XXMaxPermSize
 256M
 -framework
 -vmargs
 -Dosgi.requiredJavaVersion=1.5
 -Xms40m
 -Xmx512m
 -Duser.name=necoyama3

java.lang.OutOfMemoryError」の場合は「-Xms」だけでOKです。
しかし「java.lang.OutOfMemoryError: PermGen space」の場合は
メタデータを格納するPermanent領域と呼ばれるヒープ領域を増やすために、
「-XX:MaxPermSize」の値も増やした方がよいです。


それぞれの値の概要はこんな感じです。

 -Xms
メモリ割り当てプールの初期サイズをバイト数で指定します。
既定値は「2M バイト」です。

 -Xmx
メモリ割り当てプールの最大サイズをバイト数で指定します。
既定値は「64M バイト」です。

 -XX:PermSize
Permanent Spaceの初期値をバイト数で指定します。
既定値は「1M バイト」です。

 -XX:MaxPermSize
Permanent Spaceの最大値をバイト数で指定します。
既定値は「64M バイト」です。

指定する値は、「1024の倍数」にしなければなりません。

これで重いし、落ちるし、不安定やしということもなくなると思います。


参考にさせて頂いたサイト
http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/tooldocs/win32/java.html#options
HotSpot VMの特性を知る (2/2):Javaパフォーマンスチューニング(6) - @IT