WebOTX Manual V10.2 (第4版) 目次を表示 |
WebOTXが起動中にストール状態になる、または、コマンドからの応答がなく停止できない状態など、WebOTXが無応答状態に陥った場合には以下の手順でJava VMのスレッドダンプを取得します。
多くの場合、スレッドダンプの内容を解析することで、障害の原因を突き止めることができます。
スレッドダンプの取得方法には以下のようなものがあります。システムの動作環境や障害の状況に応じて適切な方法を選択してください。
運用管理コマンド(otxadmin)の generate-jvm-report サブコマンドを利用した方法です。本コマンドの操作に慣れているとこの方法が便利です。
利用可能なOSやJDKなどの制約はありませんが、スレッドダンプの採取にJavaヒープメモリを使用するため、該当プロセスのヒープメモリの空きが枯渇している状況では採取に失敗することがあります。
また、運用管理コマンドから取得対象のドメインに接続できない状態では本方法を実行することができません。
診断サービスによる障害解析のための情報収集機能で、スレッドダンプを取得することができます。診断機能に対する操作に慣れているとこの方法が便利です。
利用可能なOSやJDKなどの制約はありませんが、統計情報やサーバのログなどとまとめて採取されますので、それらの採取が不要な場合には不向きです。
また、運用管理ツールから取得対象のドメインに接続できない状態ではスレッドダンプの採取に失敗することがあります。
WebOTXが提供する運用インタフェースにより、単一の操作でスレッドダンプを取得します。各種運用管理ツールの操作に慣れているとこの方法が便利です。
ただし、運用管理ツールから取得対象のドメイン、または管理ドメイン(admin)のいずれにも接続できない状態では、エージェントプロセスに対してこの方法は実行できません。
OSが提供するコマンドやオペレーションを用いた方法です。
動作環境や障害の状況により先述している各方法での採取ができない場合には、この方法で取得を試みます。
ただし、Windows環境では、利用するOSバージョンや動作状況により幾つかの事前作業が伴います。また、問題再発時に取得しなければならない場合があります。
JDKに付属のスレッドダンプ採取ツール(jstack、jvisualvm)を用いた方法です。これらのツールの操作に慣れているとこの方法が便利です。
動作環境や障害の状況により先述している各方法での採取ができない場合には、この方法で取得を試みます。
ただし、HP-UX環境では利用できません。
以上の取得方法について説明します。
以下の手順でスレッドダンプを採取します。
無限ループによる障害を検出するために、数秒間隔で複数回実行するようにしてください。
otxadmin> generate-jvm-report --type thread <サーバ名>
<サーバ名>には、情報取得の対象となるサーバ(Javaプロセス)の名前を指定します。 サーバ名は次のようになります。
* ドメインのエージェントプロセス : server
* プロセスグループのアプリケーションプロセス : <アプリケーショングループ名>-<プロセスグループ名>
なお、<サーバ名>が省略された場合は "server" がデフォルトとして指定されます。
詳しい取得方法については、 [ ドメイン > Javaプロセスの監視・管理 > 統計レポート出力 ] の「スレッド情報の表示」を参照してください。
以下の手順でスレッドダンプを採取します。
運用管理コマンド・ドメインのエージェントプロセスを対象とする場合
otxadmin> set server.diagnostic-service.jvm-thread-dump=true
・プロセスグループのアプリケーションプロセスを対象とする場合
otxadmin> set server.diagnostic-service.jvm-pg-stack=true
・ドメインのエージェントプロセスが起動している場合
otxadmin> generate-diagnostic-report <対象ドメイン名>
・ドメインのエージェントプロセスが起動していない場合
otxadmin> generate-diagnostic-report --local=true <対象ドメイン名>
(注) 本方法では、プロセスグループのアプリケーションプロセスに対する採取はできません。
・エージェントプロセスを対象とする場合
「<ドメイン名>」-「アプリケーションサーバ」-「診断サービス」
「JVM」タブ内の「JVMスレッドダンプ」
・プロセスグループのアプリケーションプロセスを対象とする場合
「<ドメイン名>」-「アプリケーションサーバ」-「診断サービス」
「JVM」タブ内の「プロセスグループのスタックトレース」
診断サービスを実行すると、テキストファイルにスレッドダンプが出力されます。
詳しい取得方法については、 [ 診断サービス > 診断サービスの実行 ] を参照してください。
ユーザドメインに接続して、スレッドダンプ採取オペレーションを実行する方法です。
以下の手順でスレッドダンプを採取します。
無限ループによる障害を検出するために、数秒間隔で複数回実行するようにしてください。
次のコマンドを実行します。
・エージェントプロセスを対象とする場合
otxadmin> invoke domain.generateThreadDump
・プロセスグループのアプリケーションプロセスを対象とする場合
otxadmin> invoke tpsystem.applicationGroups.<アプリケーショングループ名>.processGroups.<プロセスグループ名>.stackTraceまたは、従来より提供しているプロセスグループ向けの専用コマンド(wostack)を使用することでも採取できます。詳しくは、[ コマンド > TPシステム > wostack ] を参照してください。 統合運用管理ツール ・エージェントプロセスを対象とする場合
対象ドメインのオペレーションから「スレッドダンプの採取」を選択します。
「実行」を押下します。
スレッドダンプの出力先は以下の通りです。
Windows: ${INSTANCE_ROOT}\logs\diagnostics\jvminfo\threaddump.txt
UNIX: ${INSTANCE_ROOT}/logs/server.log
対象ドメインの該当するプロセスグループのオペレーションから「スタックトレースの採取」を選択します。
スレッドダンプの出力先はアプリケーションログおよびシステムトレースです。
ユーザドメインがストールに陥ってしまった等で運用管理ツールからユーザドメインに接続できない場合には、管理ドメインからユーザドメインのスレッドダンプを採取することができます。
なお、このオペレーションを実行するためには、管理ドメインが起動している必要があります。
(注) 本方法では、プロセスグループのアプリケーションプロセスに対する採取はできません。
以下の手順でスレッドダンプを採取します。
無限ループによる障害を検出するために、数秒間隔で複数回実行するようにしてください。
次のコマンドを実行します。
otxadmin> invoke --port <管理ドメインの管理ポート> domain.generateThreadDump <ドメイン名>統合運用管理ツール
管理ドメインのオペレーションから「スレッドダンプの採取」を選択します。
スレッドダンプを採取するドメイン名を選択し、「実行」を押下します。
スレッドダンプの出力先は以下の通りです。
Windows: ${INSTANCE_ROOT}\logs\diagnostics\jvminfo\threaddump.txt
UNIX: ${INSTANCE_ROOT}/logs/server.log
(注) 管理ドメインからスレッドダンプ採取オペレーションを実行した場合、${INSTANCE_ROOT}は採取対象ドメインのドメインルートディレクトリを表します。
UNIXとWindowsについて、それぞれのスレッドダンプ採取の手順を示します。
以下の手順でスレッドダンプを採取します。
取得方法psコマンドによりドメインのJava VMを特定します。
・ドメインのエージェントプロセスを対象とする場合psコマンドの結果では、他のjavaプロセスとの区別がつきにくいため、Java VMに指定された-Xオプションを手がかりにプロセスを特定します。
ps -exf |grep java |grep <ドメイン名> |grep ' -X'
ドメインのエージェントプロセスのJava VMにはデフォルトで以下のオプションが引数に指定されています。-Dwebotx.funcid=agent がエージェントプロセスを表します。
-server -Dwebotx.funcid=agent -Ddomain.name=domain1 -Xms64m -Xmx512m -XX:NewRatio=2
・プロセスグループのアプリケーションプロセスを対象とする場合次のpsコマンドの結果を手がかりにプロセスを特定します。
ps -exf |grep THTPPJAVA2 |grep <アプリケーショングループ名>-<プロセスグループ名>
無限ループによる障害を検出するために、数秒間隔で複数回実行するようにしてください。
kill -QUIT <プロセス番号>
ドメインのエージェントプロセスの場合、スレッドダンプは ${INSTANCE_ROOT}/logs/server.log に出力されます。 プロセスグループのアプリケーションプロセスの場合、アプリケーションログおよびシステムトレースに出力されます。
Windowsでは、jstack という JDK 付属のツールを利用します。また、WebOTX AS <バージョン番号> Agent Serviceサービスからドメインを起動している場合は、jstack ツールに加えてMicrosoft社が提供する純正のフリーツールである PsExec というツールを利用します。詳細は、[ jstackツール ] を参照してください。
JDKに付属の監視ツールであるjstack、jvisualvmの各ツールを用いてスレッドダンプを取得する方法について説明します。
<ドメインディレクトリ>\config\appserv_pid
Windows: <JDKインストールディレクトリ>\bin\jstack.exe <プロセスID> >> <任意ファイル名>
UNIX: <JDKインストールディレクトリ>/bin/jstack <プロセスID> >> <任意ファイル名>
無限ループによる障害を検出するために、数秒間隔で複数回実行するようにしてください。
WebOTX AS <バージョン番号> Agent Serviceサービスからドメインを起動している場合は、jstack に加えてMicrosoft社が提供する純正のフリーツールである PsExec というツールを利用します。
(注)タスクスケジューラからWebOTXを起動する運用の場合、Windowsの仕様によりコンソールが表示されないことがあります。 その場合は、Windows標準の「AT」コマンド(「interactive」オプション指定が必要)での代用を検討してください。
事前作業
PsExec を予め次に示す URL のページよりダウンロードしておきます。
[URL] http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx
なお、最初の実行時には、ライセンスの確認のためのダイアログが表示されます。表示される内容を確認の上、承諾します。
取得方法
<ドメインディレクトリ>\config\appserv_pid
PsExec.exe -s <JDKインストールディレクトリ>\bin\jstack.exe <プロセスID> >> <任意ファイル名>
無限ループによる障害を検出するために、数秒間隔で複数回実行するようにしてください。
Windows: <JDKインストールディレクトリ>\bin\jvisualvm.exe
UNIX: <JDKインストールディレクトリ>/bin/jvisualvm
無限ループによる障害を検出するために、数秒間隔で複数回実行するようにしてください。