WindowsのTomcatでパーマメント領域(MaxPermSize)を指定する方法

2021年1月24日日曜日

t f B! P L

先日、Apache Tomcatの運用環境でjava.lang.OutOfMemoryError: PermGen space.が発生した。どうもこれは、Permanent(パーマメント)領域が不足しているっぽいので増やすことにした。

スポンサーリンク

Permanent(パーマメント)領域って何?

JVMのメモリでヒープ領域と言えば、多くの方が耳にしたことがあり、メモリの解放を忘れてOutOfMemoryErrorが発生し、アプリが異常終了した経験がある方も多いと思います。

ヒープ領域は「New世代領域」「Old世代領域」および「Permanent領域」の3つに大きく3つで構成されます。

「New世代」と「Old世代領域」は、インスタンスを生成したクラスのオブジェクトや配列などを管理し、「Permanent領域」はクラスローダーが読み込んだJavaのクラス、メソッドや定数などのメタデータを管理します。

上述のようにPrmanent領域には、クラスローダー(ClassLoder)を通じて、自前で作成したクラスや、外部のライブラリ(jar)から読み込んだクラスのメタデータを格納する領域で、使用するライブラリのサイズが大きかったり、読み込むクラス数が多いと領域不足になり、OutOfMemoryErrorが発生することがあります。

Prmanent領域のデフォルト値

Permanent領域のサイズは、下記表の通り-XX:PermSize-XX:MaxPermSizeの2つのオプションで指定し、デフォルト値も次の通りです。

オプション名 意味 デフォルト値
-XX:PermSize Permanent領域の初期値 1MB
-XX:MaxPermSize Permanent領域の最大値 64MB

WindowsでPermanent領域のサイズ指定

Windowsサービス化されているTomcatでは、Monitor Tomcatを使ってGUI上で指定するのが最も手軽です。

Monitor Tomcat上で、Permanent領域のサイズを指定する方法は次の通りです。

  1. スタートメニューから [Monitor Tomcat]を起動
  2. [Java]タブを選択
  3. JVMの起動オプションに-XX:PermSize=○○Mまたは-XX:MaxPermSize=○○Mを指定(両方指定してもよい)

設定が完了して保存をしたら、Tomcatを再起動して設定を判定します。

スポンサーリンク

QooQ