この章では、デプロイ時に発生する一般的なエラーについて説明します。次の項目について説明します。
デプロイ・プロセスがなんらかの理由で割り込まれた場合には、システムの一時ディレクトリ(デフォルトでは/var/tmp
)をクリーンアップする必要があります。
Application Server Controlのデプロイ・ウィザードでは、デプロイ・プロセス中に情報を格納するために、一時ディレクトリのおよそ20MBのスワップ領域を使用します。終了すると、デプロイ・ウィザードによって一時ディレクトリから不要なファイルがクリーンアップされます。
ただし、ウィザードが割り込まれると、一時ディレクトリをクリーンアップする時間や機会を失うことがあります。このため、このディレクトリから不要なデプロイ・ファイルを自分でクリーンアップする必要があります。そうしないと、このディレクトリがいっぱいになり、その後のデプロイができなくなります。
OC4Jの起動時に、java.io.tmpdir
コマンドライン・オプションで新しい場所を指定して、一時ディレクトリを変更することができます。システム・プロパティの設定の詳細は、『Oracle Containers for J2EE構成および管理ガイド』を参照してください。
この項では、デプロイ時に発生する可能性がある次のタイプのエラーについて詳しく説明します。
大容量のEARファイル(75MBを超えるファイルなど)をデプロイするときに、OC4Jによりjava.lang.OutOfMemory
エラーがスローされることがあります。十分なメモリーがある場合は、OC4Jの起動時にOC4Jプロセスのヒープ・サイズを増やすことで、この問題を解消できます。次に例を示します。
java -Xms512m -Xmx512m -jar oc4j.jar
admin.jar
コマンドライン・ユーティリティを使用してアプリケーションをデプロイするときにも、この問題が発生することがあります。この場合も、このユーティリティのヒープ・サイズを増やして解決します。
java -Xms512m -Xmx512m -jar admin.jar ormi://localhost:23791 admin welcome -deploy ...
LinuxまたはUNIX環境でOC4Jを実行している場合は、JVMプロセスでこのような大容量のメモリーの割当てが許可されていることを、ulimit
設定で確認してください。
EJBラッパー・クラスをコンパイルするためにプロセス外モードでjavac
コンパイラを使用しているときに、OC4Jから次のメッセージが返されることがあります。
The system is out of resources. Consult the following stack trace for details. java.lang.OutOfMemoryError: Java heap space
このメッセージは、javac
を実行するために生成された外部JVMプロセスで、メモリーが不足していることを示します。
コンパイラに割り当てられているデフォルトのヒープ・サイズは1024MBです。コンパイラに割り当てるメモリーを増やすには、server.xml
の<java-compiler>
要素のoptions
属性で-Xmx
オプションを設定してヒープ・サイズを増やします。次に例を示します。
<java-compiler name="javac" in-process="false" options="-J-Xmx2048m"/>
EJBラッパー・クラスをコンパイルするときに、アプリケーションが大きすぎると、javac
コンパイラによりjava.lang.StackOverflowError
がスローされることがあります。
スレッドのスタック・サイズ・オプションにより、スレッド属性オブジェクトのstacksize
属性を制御できます。この属性に、作成されたスレッドで使用される最小スタック・サイズを指定します。
このエラーが発生した場合は、server.xml
の<java-compiler>
要素のoptions
属性で-Xss
オプションを設定して、スレッド・スタック・サイズを増やすことができます。次に例を示します。
<java-compiler name="javac" in-process="false" options="-J-Xmx2048m -J-Xss=8m"/>
大容量のアプリケーションをデプロイするときに、OC4J JVMにより、開いているファイルの数が多すぎることを知らせる例外がスローされる場合があります。次に例を示します。
java.net.SocketException: Too many open files java.io.IOException: Too many open files
このような例外は、オペレーティング・システムでファイル記述子が不足していることを示します。ファイル記述子は、様々な種類の開いているファイル(ソケットやパイプなど)を識別するために、プロセスによって使用されます。
通常、ファイル記述子の数を増やすと、このような問題は解決されます。UNIX環境では、ulimit -n
コマンドでファイル記述子の数を増やすことができます。ファイル記述子の最大数と、プロセスに割り当てられる最大サイズは、リソースの制限によって定義されます。強い制限値の詳細は、オペレーティング・システム固有のシステム管理マニュアルを参照してください。