猫にWeb

2009-06-10

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

Eclispeを起動して、Tomcatを起動したら「java.lang.OutOfMemoryError」が出ました。

TomcatエンジンはJavaVMを利用していますが、

ある閾値のメモリを確保できない場合にこのエラーが発生します。

JavaVMが確保可能なメモリ領域は起動する際に最大値が決まっていて、

それ以上はマシンのメモリの空きに余裕があっても使えないみたいです。

対処法として下記のような設定をします。

Eclispeの「サーバー」ビューをダブルクリックして、「概要」画面を開き、

「起動構成を開く」のリンクをクリックします。

「構成の編集」画面が開いたら、「引数」タブを選択し、

VM引数(G)」のテキストエリアで、下記を追加します。

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

f:id:necoyama3:20090611011417j:image:medium


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の倍数」にしなければなりません。

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


参考にさせて頂いたサイト

no title

HotSpot VMの特性を知る (2/2):Javaパフォーマンスチューニング(6) - @IT

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/necoyama3/20090610/1244652868
Connection: close