Accessibility

JRun サポートセンター

java.lang.OutOfMemoryError

サーブレットや JSP ページが何らかの問題を持っていて、ログ ファイルまたは Java 仮想マシン (JVM) によって生成されるスタック トレースに "java.lang.OutOfMemoryError" を見るなら、恐らく JVM の最大ヒープ サイズを増やす必要があります。


Java 仮想マシンの各インスタンスは ヒープと呼ばれるそのすべてのスレッドの中で共有されるすべてのオブジェクトにおいてメモリのアロケーションを使います。 Java Virtual Machine Specification で述べるように、 "ヒープはすべてのクラス インスタンスおよび配列に対するメモリがアロケートされるランタイム データ エリアです。"

ヒープの振る舞いのデフォルト サイズと機能のいくつかはインプリメンテーションに依存します。しかし、ほとんどの (そうでなければすべて) インプリメンテーションはヒープの最小と最大サイズを修正することができ、これらの設定のためのほとんどのデフォルト値を提供します。

Sun の Windows および Solaris 1.1 JVM のデフォルト最大ヒープ サイズは 16 MB です。これはほとんどのサーバ サイド Java アプリケーションに十分な量ではありません。デフォルト最小ヒープ サイズは 1 MB です。

Sun の Windows および Solaris 1.2 と 1.3 JVM のデフォルト最大ヒープ サイズは 64 MB です。(そして、デフォルト最小ヒープ サイズは 1 MB です。) これは、妥当な量ですが、ほとんどのエンタープライズ レベルのサーバ サイド Java アプリケーションはより高い設定を必要とします。設定の選択は、テスト、試用、エラーによって決定してください。それは、アプリケーションと負荷に大きく依存します。最適なヒープ設定を概算する方法のいくつかの指針を提供する良いスターター記事はここにあります。 IBM の Java サイト: "Heap of trouble" with the wrong heap size

IBM の 1.1.8 JVM のデフォルト ヒープ サイズは、物理メモリ サイズの合計の 2 分の 1 です。

アプリケーションで OutOfMemoryErrors をキャッチしようとするべきではありません。それは一般的に予測可能ではありません。そして、それが起こるとき、 JVM はメモリが欠乏し、ガベージ コレクターがさらに動作するためのメモリを解放することができないので、リカバリするために何も行われません。

ここに Java Virtual Machine Specification からの OutOfMemoryError のための必要条件があります。

"If a computation requires more heap than can be made available by the automatic storage management system, the Java virtual machine throws an OutOfMemoryError." (算出が自動的なストレージ管理システムによって利用可能にすることができるより多くのヒープを必要とする場合、Java 仮想マシンは OutOfMemoryError をスローします。) -- セクション 3.5.3, Heap

回避策

JRun 2.3.3 の最大ヒープ サイズを増やすためには、 jrun/jsm-default/properties/jsm.properties 内の java.args プロパティを編集します。

1.1 JDK 用:
java.args=-mx64m

1.2 JDK 用:
java.args=-Xmx128m

ここに、いくつか他の設定に加えて、指定された min と max メモリ設定とともに、 Java 1.2 固有 java.args プロパティ設定の実例があります。 jsm.properties 中の同じプロパティに、より多くの引き数を加える方法を見ることができます。:

java.args=-Xms64m -Xmx128m -Xrs -Djava.compiler=NONE

正確な構文およびデフォルト値については特定の JDK のドキュメンテーションをお調べください。

JRun 3.0 の最大ヒープ サイズを増加するために、JRun 管理コンソールを使います。 [JRun Default Server] >> [Java 設定] >> [Java 引数] を選択します。入力フィールドに希望の引数を入力します。更新を選択し、その後、JRun Default Server を再起動します。

メモ 1: メモリ設定のデフォルト単位はバイトです。そのため、数がキロバイトあるいはメガバイトとして解釈されるよう指定するためには、"k" あるいは "m" を指定しなければなりません。

メモ 2: これらの設定に間違った構文を使うことは、JVM の開始を妨げるかも知れません。これらを変更し、その後、JRun を再起動しようとして失敗する場合、オプションの入力を再チェックしてください。

追加情報

このテクニカルノートは、米国 Macromedia, Inc. の java.lang.OutOfMemoryErrorr(TechNote17470)をもとに作成されました。

株式会社 アイ・ティ・フロンティア にて翻訳されました。

ID: 17470
Product: JRun
Versions: N/A
OS: N/A
Browser: N/A
Server: N/A
Database: N/A
Former ID: 13940