WebLogic Server でスレッドダンプを採取するスクリプト
(2012/4/25追記) HotSpot 環境で以下の手順によりスレッドダンプを採取しても 侍 や ThreadLogic では解析できない出力形式となるため、この手順は JRockit 環境でご利用ください。
必要に迫られて WebLogic Server でスレッドダンプを採取するスクリプトを作成してみました。利用手順は以下の通りです。
1. 以下のような内容で threadDump.py と言う名称の WLST(WebLogic Scripting Tool) のスクリプトファイルを作成します。
connect('weblogic','welcome1','t3://localhost:7001') import time import traceback while(true): try: threadDump(writeToFile='false', serverName=InstanceName) time.sleep(10) except: print "<<>>" traceback.print_exc() break
(補足1) ブログ表記の都合上、空白文字にしましたがスクリプトのインデント部分はタブ文字を利用してください。
(補足2) 管理サーバの URL、管理ユーザ名/パスワードは適宜変更してください。
2. threadDump.py を実行する threadDump.cmd と言うスクリプトファイルを作成し、DOMAIN_HOME 環境変数を適宜設定します。
@ECHO OFF SETLOCAL set DOMAIN_HOME=\user_projects\domains\<ドメイン名> call "%DOMAIN_HOME%\bin\setDomainEnv.cmd" java weblogic.WLST -loadProperties %1 threadDump.py > %1_dump.txt ENDLOCAL
(補足3) Unix 環境の場合は上記内容を参考に適宜作成してください。
3. 以下のような感じでプロパティファイルを用意し、スレッドダンプ取得対象のインスタンス名を指定します。
(例1) 管理サーバ用プロパティファイルの設定例
- ファイル名 : AdminServer
- インスタン名 : AdminServer
InstanceName=AdminServer
(例2) 管理対象サーバ用プロパティファイルの設定例
- ファイル名 : ManagedServer
- インスタンス名 : node1
InstanceName=node1
4. コマンドプロンプトから以下のようにスクリプトを実行します。
threadDump.cmd <プロパティファイル名>
(例1) 管理サーバのスレッドダンプを採取する場合
threadDump.cmd AdminServer
(例2) 管理対象サーバのスレッドダンプを採取する場合
threadDump.cmd ManagedServer
5. 10秒間隔でプロパティファイルで指定したインスタンスに対するスレッドダンプが <プロパティファイル名>_dump.txt と言うファイル名で出力されます。
6. スレッドダンプの採取を終了するには Ctrl + C を実行します。
7. 採取できたスレッドダンプは、侍 や ThreadLogic を用いることで簡単に分析することが可能です。
・侍
http://yusuke.homeip.net/samurai/ja/
・ThreadLogic 原文紹介
https://blogs.oracle.com/ATeamExalogic/entry/introducing_threadlogic
・ThreadLogic 日本語の紹介
http://orablogs-jp.blogspot.com/2012/02/introducing-threadlogic.html
・ThreadLogicダウンロードページ
http://java.net/projects/threadlogic/downloads
ThreadLogic では WebLogic Server の各スレッドの状態をカテゴリ分けしたり、気にしなくても良いステータスであるかなどを分り易く表示してくれます。
また、複数のスレッドダンプを選択し diff を実行することで各スレッドの状況に変化があるかどうかを簡単に確認することができます。