Jakarta EEアプリケーションの運用環境に関する以下のトラブルについて対処方法を説明します。
サービスなどの起動が失敗し、ログに「アドレスは既に使用中です」、「Address already in use」、または「No free port within range」が含まれている場合
ポート番号が重複している可能性があります。ポート番号は、システム上のアプリケーションを含む、すべてのサービスでそれぞれ異なるポート番号を設定する必要があります。
ポート番号を確認し重複していた場合は、一意となるようにポート番号を変更してください。
ポート番号の詳細については「付録C ポート番号」を参照してください。
GlassFish Serverインスタンス起動時の異常
GlassFish Serverインスタンスの起動に失敗した場合は、以下のログにエラーメッセージが出力されていないかを確認し、「第12章 Jakarta EEのメッセージ」を参照して起動失敗の原因を調査してください。
イベントログ(Windows)/システムログ(Linux)
サーバーログ
Java VMログ
PCMIサービストレースログ
Javaヒープ領域またはメタスペース不足などメモリ不足のメッセージが表示される場合、「13.18 OutOfMemoryErrorがログに出力された場合」を参照し、それぞれの領域サイズを増やしてください。
また、以下の対処をしてください。
GlassFish Serverインスタンスの起動処理遅延またはハングアップによりGlassFish Serverインスタンス起動待ち時間を超過した場合は、Java VMログにJava VMプロセスのフルスレッドダンプが出力されます。フルスレッドダンプを参照し、起動処理遅延やハングアップの原因となるアプリケーションがないかを確認してください。
通信ポートを獲得できないために起動に失敗している場合は、「付録C ポート番号」を参照して、ポート番号が一意になるようにチューニングしてください。
Java VMログに「java.lang.RuntimeException: Fatal Error. Unable to parse file:[domain.xmlのパス]」または「1バイトのUTF-8シーケンスのバイト1が無効です。」のメッセージが出力されている場合、定義項目の値に指定できない文字列(日本語などのマルチバイト文字)が含まれているため定義を修正してください。なお、パラメータ点検機能を使用することで定義の誤りを検出することができます。パラメータ点検機能については「4.10 パラメータ点検機能」を参照してください。
Java VMログに「Unrecognized VM option [オプション名]」のメッセージが出力されている場合、OpenJDK 8以降で使用できなくなった旧オプションを指定している可能性があります。メッセージに出力されているオプションを削除してください。
上記の調査をしても原因を特定できない場合は、eapfcollectinfoコマンドで資料採取をした上で技術員に連絡してください。
GlassFish Serverインスタンス起動時にjava.lang.OutOfMemoryErrorが出力された場合
GlassFish Serverインスタンスを起動したときに、以下のメッセージを出力してコマンドが異常終了した場合は、リポジトリの同期化で使用するJavaヒープが不足している可能性があります。
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
このときスタックトレースに、以下の文字列が含まれます。
com.sun.enterprise.admin.cli.cluster.SynchronizeInstanceCommand.synchronizeInstance
以下の対処をし、Javaヒープのサイズを大きくしてから再度実行してください。
start-local-instanceサブコマンドを実行する場合
環境変数VMARGSに-Xmxオプションを指定し、Javaヒープのサイズを大きくします。
下記はJavaヒープのサイズを256MBに指定する場合の、環境変数の設定例です。
VMARGS=-Xmx256m
管理コンソールでGlassFish ServerクラスターやGlassFish Serverインスタンスを起動する、またはstart-clusterサブコマンドを実行する場合
PCMIプロファイルを編集して、DASの環境変数VMARGSにJavaヒープのサイズを指定するJVMオプションを設定してください。PCMIサービスの定義項目の環境変数についての詳細は「環境変数」を参照してください。
下記はJavaヒープのサイズを256MBに指定する場合の、環境変数の設定例です。
VMARGS=-Xmx256m
Javaヒープに指定するサイズの目安は、以下の計算式で算出できます。Javaヒープに指定するサイズの十分性は個別のGlassFish Serverクラスターごとに確認してください。
起動対象のGlassFish Serverクラスターに配備しているアプリケーションのサイズの合計(注) × 10
(注) warファイル等のサイズではなく、展開後のファイルの合計サイズです。GlassFish Serverクラスターに複数のアプリケーションが配備される場合は、配備したすべてのアプリケーションのファイルの合計サイズを使用してください。
GlassFish Serverインスタンスの異常終了
GlassFish Serverインスタンスプロセスが異常終了した場合は、以下のログにエラーメッセージが出力されていないか確認し、「第12章 Jakarta EEのメッセージ」を参照して異常終了の原因を調査してください。
イベントログ(Windows)/システムログ(Linux)
サーバーログ
Java VMログ
上記の調査をしても原因を特定できない場合は、eapfcollectinfoコマンドで資料採取をした上で技術員に連絡してください。
ポイント
PCMIプロファイルの「プロセスの自動再起動」に「自動再起動する」を設定している場合は、運用中にGlassFish Serverインスタンスのプロセスが異常終了しても、PCMIサービスの自動再起動機能によりプロセスの自動再起動が行われるため、業務を継続できます。詳細については、「4.4.1 Java VMプロセスの生死監視」を参照してください。
GlassFish Serverインスタンスのレスポンスが悪化する場合
サーバーログのログレベルが高い(FINE/FINER/FINEST)場合、ログ出力に時間がかかり、処理の遅延またはプロセス起動待ち時間の超過によるGlassFish Serverインスタンスの起動失敗などが発生する可能性があります。
適正なログレベルに設定されていることを確認してください。
DAS起動時の異常
DASの起動に失敗した場合は、標準出力と以下のログにエラーメッセージが出力されていないか確認し、「第12章 Jakarta EEのメッセージ」を参照して起動失敗の原因を調査してください。
DASのサーバーログ
サーバーログにエラーメッセージが出力されておらず、かつコマンドラインのみ出力される場合、以下のディレクトリーを削除後、DASを起動してください。
[運用資産格納ディレクトリー]\domains\domain1\osgi-cache\felix |
[運用資産格納ディレクトリー]/domains/domain1/osgi-cache/felix |
ログファイルについての詳細は、「5.10 Jakarta EEアプリケーションのログ」を参照してください。
起動時の異常によって、不正にプロセスが残存する場合があります。「DASのプロセス回収手順」を参照して、残存しているプロセスを回収してください。
JVMオプションのチューニングによって、製品の動作に必要なオプションを削除している場合があります。「10.9.15 Java VMの定義項目」を参照して、デフォルトのJVMオプションを削除していないか確認してください。
通信ポートの獲得失敗による起動失敗
通信ポートを獲得できないために起動に失敗している場合は、「ポート番号の重複によってDASが起動できない場合」、または「付録C ポート番号」を参照してポート番号をチューニングしてください。
なお、他のサービス・プロセスとのポート番号重複によりDASの起動に失敗している場合、重複したポート番号を利用しているサービス、プロセスを一旦停止した上で、DASを起動して設定を変更してください。
HTTPリスナーの設定値異常による起動失敗や操作不能
HTTPリスナーに対する設定を誤った場合、DASやGlassFish Serverクラスターの起動に失敗する場合があります。
GlassFish Serverクラスターの場合は、GlassFish Serverクラスターが停止、DASが起動している状態でasadminコマンドを実行し、正しい値を設定してください。その後GlassFish Serverクラスターを起動することにより復旧できます。
DASの場合、HTTPリスナーの設定に異常があると起動ができない、asadminコマンドによる操作を受け付けないという状態になります。
この場合、DASが停止している状態でdomain.xmlを修正します。
注意
domain.xmlを編集する際は、下記に示す箇所以外の設定を変更しないでください。変更するとDASを使用できなくなる場合があります。また、編集前にdomain.xmlを退避することをおすすめします。
以下のファイルをテキストエディターなどで開いて編集します。
[運用資産格納ディレクトリー]\domains\domain1\config\domain.xml |
[運用資産格納ディレクトリー]/domains/domain1/config/domain.xml |
name属性に「server-config」が設定されているconfigタグ配下について、以下の観点を確認します。不正な値が指定されている場合は編集します。
port属性が存在するかどうか、また指定されているポート番号の値が正しいかどうか
port属性は必ず指定されている必要があります。
address属性がある場合、マシンのIPアドレスとなっているか
address属性が存在しない場合、初期値「0.0.0.0」が指定されているものとして動作します。
enabled属性がある場合、運用管理用HTTPリスナー(admin-listener)に対してfalseが設定されていないか
falseの場合、asadminコマンドによる操作を受け付けることができないため、trueを設定します。
transport属性、protocol属性、thread-pool属性が存在しているか
存在しない場合、以下の例のように指定する必要があります。
例
正常なdomain.xmlの例
<domain log-root="${com.sun.aas.instanceRoot}/logs" ・・・> ・・・ <configs> <config name="server-config"> ・・・ <network-config > ・・・ <network-listeners> <network-listener protocol="http-listener-1" port="8080" name="http-listener-1" thread-pool="http-thread-pool" transport="tcp"></network-listener> |
インストール直後のdomain.xmlの状態は、以下のようになっています。
ポート番号 | ネットワークアドレス | HTTPリスナーの有効化 | |
---|---|---|---|
運用管理用HTTPリスナー | 4848 | 指定なし (初期値0.0.0.0) | 指定なし (初期値true) |
HTTPリスナー | 8080 | 指定なし (初期値0.0.0.0) | 指定なし (初期値true) |
HTTPSリスナー | 8181 | 指定なし (初期値0.0.0.0) | 指定なし (初期値true) |
DAS停止時の異常
DASの停止に失敗した場合は、標準出力と以下のログにエラーメッセージが出力されていないか確認し、「第12章 Jakarta EEのメッセージ」を参照して停止失敗の原因を調査してください。
DASのサーバーログ
また、停止時の異常によって、不正にプロセスが残存する場合があります。「DASのプロセス回収手順」を参照して、残存しているプロセスを回収してください。
DASの異常終了
DASが異常終了した場合は、システムログ/イベントログにエラーメッセージが通知されます。
その他の場合は、eapfcollectinfoコマンドで資料採取をした上で技術員に連絡してください。
なお、DASが異常終了すると、asadminコマンドによる定義変更やGlassFish Serverインスタンスの操作ができません。本現象が発生した場合は、DASを再起動してください。
ポイント
PCMIプロファイルの「プロセスの自動再起動」に「自動再起動する」を設定している場合は、運用中にDASのプロセスが異常終了しても、PCMIサービスの自動再起動機能によりプロセスの自動再起動が行われるため、業務を継続できます。詳細については、「4.4.1 Java VMプロセスの生死監視」を参照してください。
DASの動作が定義項目の値と異なる場合
getサブコマンドで取得される値とDASの動作が異なる場合、DASを再起動してください。再起動しても定義項目の値が反映されない場合、資料採取をした上で技術員に連絡してください。
DASが操作を受け付けない場合
「DASのフルスレッドダンプ採取手順」を実施して、ユーザーアプリケーションがハングしていないかどうか確認してください。ユーザーアプリケーションがハングしていない場合、「DASのプロセス回収手順」を参照して、残存しているプロセスを回収してください。資料採取をした上で技術員に連絡してください。
また、運用管理HTTPリスナーのポート番号を変更した場合、通常の運用操作は受け付けません。「運用管理用HTTPリスナーのポート番号を変更する場合」を参照してください。
DASのフルスレッドダンプ採取手順
以下の手順により、DASのフルスレッドダンプを採取してください。
以下のファイルを参照して、DASのプロセスIDを確認してください。
[運用資産格納ディレクトリー]\domains\domain1\config\pid |
[運用資産格納ディレクトリー]/domains/domain1/config/pid |
注意
ファイルが存在していない場合、またはjavaプロセスが存在しない場合、プロセスは存在していません。
1で確認したIDのプロセスがjavaプロセスとして存在しているか、以下の方法で確認してください。
Windowsのタスクマネージャーで確認してください。
psコマンドを使用して確認してください。
1で確認したプロセスIDに対して、以下の方法でフルスレッドダンプを取得してください。
jcmd <プロセスID> Thread.print コマンドを実行してください。
DASのプロセス回収手順
以下の手順により、DASのプロセスを回収してください。
以下のファイルを参照して、DASのプロセスIDを確認してください。
[運用資産格納ディレクトリー]\domains\domain1\config\pid |
[運用資産格納ディレクトリー]/domains/domain1/config/pid |
注意
ファイルが存在していない場合、またはjavaプロセスが存在しない場合、プロセスは存在していません。
1で確認したIDのプロセスがjavaプロセスとして存在しているか、以下の方法で確認してください。
Windowsのタスクマネージャーで確認してください。
psコマンドを使用して確認してください。
1で確認したプロセスIDに対して、以下の方法でプロセスを回収してください。
Windowsのタスクマネージャーでプロセスを終了させてください。
killコマンドを使用してプロセスを削除してください。
DASでのアプリケーション運用時の異常
DASでアプリケーションを運用する際の異常については、「13.3.3 アプリケーションの運用に関する異常」を参照してください。
PCMIサービス起動時の異常
PCMIサービスの起動に失敗した場合は、以下のログにエラーメッセージが出力されていないかを確認し、「第12章 Jakarta EEのメッセージ」を参照して起動失敗の原因を調査してください。
イベントログ(Windows)/システムログ(Linux)
PCMIサービストレースログ
メッセージPCMI1008が出力されている場合は、PCMIサービス起動時の出口機能で実行する起動時スクリプトの内容や実行時間に問題ないか確認してください。起動時スクリプトが正しい場合はPCMIサービスの起動タイムアウト時間をチューニングしてください。PCMIサービス起動時の出口機能については、「5.2.6 サービスの起動時・停止時の出口機能」を参照してください。PCMIサービスの起動タイムアウト時間をチューニングする場合は、「7.1.3 PCMIサービス動作定義の変更方法」を参照してください。
PCMIサービスの異常終了
PCMIサービスが異常終了した場合は、eapfcollectinfoコマンドで資料採取をした上で技術員に連絡してください。
なお、PCMIサービスが異常終了すると、以下の機能は動作しません。ただし、運用中のアプリケーションの動作には影響ありません。
DASの起動/停止
GlassFish Serverクラスターの起動/停止
GlassFish Serverインスタンスの起動/停止
プロセスの生死監視
プロセスの生存通知監視
プロセスの停止時間監視
アプリケーション最大処理時間の監視
Java VMログ採取
PCMIサービス停止時のスクリプトの実行
Javaヒープ領域/メタスペース不足時の制御
注)PCMIサービスが異常終了すると、PCMIプロファイルの「Javaヒープ領域/メタスペース不足時の制御」の設定状態により以下のように動作します。
「restart」の場合
プロセスを再起動できないため、プロセスダウンとなります。
「oome」の場合
アプリケーションに「java.lang.OutOfMemoryError」が返却されます。動作には影響ありません。
正常な状態に復旧するには、以下の手順でリカバリーをしてください。
運用中のGlassFish Serverインスタンスを確認します。
asadminコマンドのlist-instancesサブコマンドで起動状態のGlassFish Serverインスタンスを確認してから、以下のファイルを参照し、起動状態のGlassFish ServerインスタンスのプロセスIDを確認してください。
[運用資産格納ディレクトリー]\nodes\localhost-domain1\<GlassFish Serverインスタンス名>\config\pid
[運用資産格納ディレクトリー]/nodes/localhost-domain1/<GlassFish Serverインスタンス名>/config/pid
注意
ファイルが存在していない場合、プロセスは存在していません。
1で確認したIDのプロセスがjavaプロセスとして存在しているか、以下の方法で確認してください。
Windowsのタスクマネージャーで確認してください。
psコマンドを使用して確認してください。
注意
プロセスIDに対応するjavaプロセスが存在しない場合、プロセスは存在していません。
1で確認したプロセスIDに対して、以下の方法でプロセスを回収してください。
Windowsのタスクマネージャーでプロセスを終了させてください。
killコマンドを使用してプロセスを削除してください。
DASのプロセス回収手順で、DASのプロセスを回収してください。
以下の手順でPCMIサービスを起動します。
PCMI(glassfish)サービスを停止して、起動します。
PCMIサービスを起動します。
DASを再起動します。
GlassFish Serverクラスターを再起動します。
注意
リカバリーをせずにPCMIサービスを起動した場合、リカバリーをしていないGlassFish Serverインスタンスに対して正しい操作ができません。リカバリーをして、正常な状態に復旧してください。
リカバリー対象は、PCMIサービスより前に起動しているGlassFish Serverインスタンスです。リカバリーをせずにPCMIサービスを起動した状態で、リカバリー対象のGlassFish Serverインスタンスを見分ける場合は、PCMIサービスの起動時刻とGlassFish Serverインスタンスの起動時刻を比較して判別してください。
なお、PCMIサービスの起動時刻はイベントログ/システムログに出力されたメッセージ「PCMI1000」の時刻、GlassFish Serverインスタンスの起動時刻はイベントログ/システムログに出力されたメッセージ「PCMI1002」の時刻でそれぞれ確認してください。
管理コンソールでGlassFish Serverクラスターの起動に失敗する場合
asadmin change-master-passwordサブコマンドの実行後、管理コンソールでGlassFish Serverクラスターの起動に失敗する
管理コンソールを使用する場合、GlassFish Serverクラスターの操作にはマスターパスワードを保存したファイルが必要です。asadmin change-master-passwordサブコマンド実行時に--savemasterpasswordオプションにfalseを指定した場合は、管理コンソールでGlassFish Serverクラスターの起動ができません。
asadmin change-master-passwordサブコマンドの--savemasterpasswordオプションにtrueを指定して再実行してください。
Javaヒープ領域獲得に失敗する
Javaヒープ領域が不足していることが原因でGlassFish Serverクラスターの起動に失敗する場合、「13.18 OutOfMemoryErrorがログに出力された場合」を参照し、Javaヒープのサイズを大きくしてください。
SEVERE: doSelect exception java.util.concurrent.RejectedExecutionException: The thread pool's task queue is full, limit: {0}
[可変情報]
{0}:キューサイズ
上記メッセージが頻繁に出力される場合、DASの運用管理用のスレッドプール「admin-thread-pool」に対して、キューサイズを拡張してください。