![]() ![]() ![]() ![]() |
Oracle JRockit JVM または Java アプリケーションがクラッシュしていないのに応答しなくなった場合は、フリーズしていると考えられます。システムのフリーズが発生するのは、アプリケーションが要求に応答しなくなり、プロセスがまだ存在している場合です。システムのフリーズは、JVM またはアプリケーションのどちらかで起きる可能性があります。最初にすべきことは、フリーズがどこで起きているかを確認することです。
ほとんどの場合、JVM のフリーズを解決するには Oracle JRockit サポートに連絡する必要があります。この節では、システムのフリーズがどこで起きているかを診断する方法と、サポート チームによる問題解決に役立つ情報を収集する方法について説明します。
フリーズがアプリケーションと JVM のどちらで起きているのかを確認するには、以下のいずれかを実行してスレッド ダンプを生成してみます。
すべてのプラットフォームで、jrcmd
を使ってスレッド ダンプを取得することもできます。次に例を示します。
jrcmd nnnn
"print_threads nativestack=true"
nnnn
は Java プロセスの PID です。マシンで実行されているすべての Java プロセスについて PID のリストを取得するには、コマンドライン パラメータを指定せずに jrcmd
を実行します。
これらの手順の結果から、次のようにフリーズがどこで起きているかがわかります。
アプリケーションのフリーズは、Java アプリケーションの何かが原因でシステムが応答しなくなった場合に発生します。ここでは、Java アプリケーションのフリーズに対処する方法について説明します。内容は以下のとおりです。
Java アプリケーションのフリーズに対処するには、次の 2 つの方法があります。
これらの方法で対処しても問題が解決しない場合は、「Oracle サポートへのトラブル レポートの送付」に記載されている手順に従って Oracle サポートに問題を報告します。Java アプリケーションのフリーズに関するトラブル レポートを作成するときは、以下の情報を添付してください。
Ctrl-Break を使用する方法、または親 Java プロセス PID に SIGQUIT (kill -3)
を送信する方法を何度か試みてもスレッド ダンプを取得できない場合は、JVM がシグナルの処理を停止しており、本当にフリーズしています。このような場合は Oracle サポートに連絡し、連携して問題の解決に当たる必要があります。ここでは、JRockit JVM を強制的にクラッシュさせて、必要なクラッシュ ファイルを作成する方法について説明します。内容は以下のとおりです。
JVM のフリーズを解決するには、Oracle サポートに連絡する必要があるので、JVM がフリーズしたときに実行されていたプロセスの状態について、できるだけ多くの情報を集めてください。通常、この情報はクラッシュ ファイルに書き込まれますが、JRockit JVM が技術的にはクラッシュしていないため、JVM を強制的にクラッシュさせない限りファイルは作成されません。この節では、ご使用の JVM デプロイメントに応じて必要な状態情報を収集する方法について説明します。
Linux で実行されている JRockit JVM の情報を収集するには、次のいずれかの方法を使用します。
R25 以降のバージョンの JRockit JVM では、enableforce_crash
コマンドを使って JRockit JVM を強制的にクラッシュさせることができます。それにより、必要な状態情報を含むクラッシュ ファイルが作成されます。コマンド ラインに次のオプションを指定し、jrcmd
を使用して強制的にクラッシュさせます。
-Djrockit.ctrlbreak.enableforce_crash=true
SIGABRT
は、プロセスに送信されたシグナルを中止させてクラッシュを引き起こします。それにより、クラッシュ ファイルが作成されます。以下のような方法で SIGABRT
を呼び出します。
注意 : | 以下の手順はカーネル 2.6 ベースの Linux システムおよび Red Hat Enterprise Linux 3.0 で有効です。 |
pstree -p webadmin | grep java
pstree
によって不要な情報が大量に表示される場合は、先に LANG
環境変数の設定を解除してみます。unset LANG
pstree
によって複数のプロセスが表示される場合は、次のように入力してプロセスのコマンドライン パラメータを出力します。cat /proc/nnnn
/cmdline | xargs --null -n1 echo
ls -l /proc/1234
/cwd
これにより、core
ファイル (コア ダンプ クラッシュ ファイル) が作成される場所がわかります (PID を 1234
と仮定した場合)。
ulimit -c unlimited
kill -SIGABRT
1234
Windows で実行されている JRockit JVM の情報を収集するには、次のいずれかの方法を使用します。
R25 以降のバージョンの JRockit JVM では、診断の enableforce_crash
コマンドを使って JRockit JVM を強制的にクラッシュさせることができます。それにより、必要な状態情報を含むクラッシュ ファイルが作成されます。コマンド ラインに次のオプションを指定し、jrcmd
を使用して強制的にクラッシュさせます。
-Djrockit.ctrlbreak.enableforce_crash=true
windbg コマンドを使用して、必要なコア ファイルを作成することもできます。次のコマンドを入力します。
windbg.exe -Q -pd -p nnnn
-c ".dump /u /ma hung.mdmp; q"
注意 : | windbg は以下の URL からダウンロード可能な Windows 用デバッグ ツール パッケージに含まれています。 |
注意 : |
http://www.microsoft.com/whdc/devtools/debugging/default.mspx |
JRockit JVM をサービスとして起動した場合は、次のいずれかの方法でスレッド ダンプを収集できます。
print_threads
Ctrl-Break ハンドラを指定して jrcmd
を実行する。jrcmd
の背景知識については「jrcmd の使用」を、print_threads
の使用方法については「利用可能な診断コマンド」を参照してください。beasvc -dump
を使用して JVM からスレッド ダンプを取得できる。詳細については、「WebLogic Server インスタンスの Windows サービスとしての設定」を参照してください。
Oracle サポートに連絡してください。Oracle サポートでは、JVM のフリーズの問題が解決するまで原因の調査を続けます。収集したすべてのスレッド ダンプを含めて、フリーズに関係するあらゆる情報を送付してください。Oracle サポートへの連絡方法については、「Oracle サポートへのトラブル レポートの送付」を参照してください。
注意 : | この情報は Linux ユーザのみを対象とします。 |
場合によっては、Network File System (NFS) の問題が原因でフリーズが発生することがあります。NFS は、複数の Linux コンピュータがネットワークを介してディスクを共有するために使用するプロトコルです。「NFS 共有」は、NFS で他のコンピュータから共有されるように設定されたディスクです。NFS 共有を持つマシンを使用している場合は (/etc/fstab
で nfs
を探します)、応答しない NFS 共有のデータにアクセスしようとして、Java アプリケーションがフリーズしている可能性があります。この場合、デフォルトの動作では、ファイル アクセスを実行しているスレッドは NFS サーバが回復するまでいかなるシグナルにも応答しません。このため、Oracle JRockit JVM はスレッドを中断することができず、NFS サービスが回復するまでスレッドを中断しようとしてフリーズします。
NFS の問題が発生している場合は、NFS サーバが正しくコンフィグレーションされていることを確認してください。
![]() ![]() ![]() |