現在地

Weblogic Server のトラブル調査に役立つスレッドダンプ

今号では、Weblogic Server のトラブル調査に役立つスレッドダンプについてご紹介しております。ぜひご一読ください。

スレッドダンプとは

動作中の JVM の各スレッドにおけるスナップショットで取得したスタックトレース情報です。

スレッドダンプってどうやって取得するの?

代表的な取得方法は下記の通りです。

UNIX 環境の場合

下記コマンドを実行し、標準出力に出力された内容を保存して下さい。

kill -3 <PID> 

Windows 環境の場合

プロセスが実行されているコマンドプロンプト上で Ctrl + Break を押下し、出力された内容を保存して下さい。

  • Windows 環境で Weblogic Server をサービスとして起動している場合、下記のコマンドを実行して下さい。(KROWN#146624)
WL_HOME\bin\beasvc -dump -svcname:service-name

上記の service-name には Windows 上の Weblogic Server のサービス名を指定して下さい。尚、事前に標準出力のリダイレクトの設定が必要です。
その他の方法については KROWN#143111 をご参照ください。

必ず複数回取得してください

スレッドダンプはその時点の情報を切り取るものです。事象の状況を正しく把握するためには、複数回取得し、1 回目の情報と 2 回目以降の情報を比較して差分から状況を分析します。そのため、1 回のみのスレッドダンプでは得られる情報が少なく、せっかく取得いただいても効果的に生かせないということも考えられます。複数回取得していただくことはとても重要です。

スレッドダンプ採取の間隔

事象発生時に 5 - 10 秒間隔で数回取得する必要があります。一定間隔で複数回取得することで、アプリケーションの進行状況が把握できます。間隔は事象発生時にアプリケーションの処理が滞る時間に依存するため、事象の発生状況に合わせて調整する必要がございます。問題となる処理の実行中に複数回取得してください。

スレッドダンプからわかること

事象発生時のスレッドダンプを一定間隔で複数回取得し、比較することで、アプリケーションの進行状況から、アプリケーションのハングやスローダウンの原因、CPU 100% の際の処理内容等をつかむ手がかりとなる可能性があります。

例)

  • 全スレッドについて状態遷移が無い … プロセスハングの可能性
  • スレッドの処理が少しづつではあるが進んでいる … スローダウン
  • CPU 100% の際に処理されているプロセス … CPU 100% の原因である可能性

スレッドダンプ自体が取得できない場合、 JVM 自体がハングしている可能性も考えられます。

まとめ

スレッドダンプは調査に非常に有力な手がかりとなります。取得していない場合、次回事象発生時に取得をお願いすることになり、あまり再現性の高くない事象の場合、原因の追究に至らず、次回事象発生時の情報取得待ちとなってしまうことも考えられます。事象発生中に必ず取得し、お問合せをいただく際にログ等の情報と併せてご提供ください。

(オラクル事業部 技術担当サポートセンターG 長瀬)