https://blogs.oracle.com/vijaya/entry/different_ways_to_take_thread
WebLogic Serverでスレッドダンプを取る方法あれこれ
WebLogic Server (WLS) およびJavaでは様々な方法でスレッドダンプを取ることができます。その方法の詳細を以下にまとめました。スレッドダンプ採取にあたっては、Javaクラスや管理コンソールではなく、OSコマンドを使うことを常に推奨します。それは、管理コンソールがハングアップした場合、ユーザーが接続できずスレッドダンプを採取できなくなるからです。- WebLogic Serverをコマンドラインスクリプトから立ち上げている場合、OSコマンドを使いスレッドダンプを取得する。
- Windowsでは、スレッドダンプの採取方法は以下の通りです。
スレッドダンプをサーバーの標準出力に生成する
<ctrl>+<break>
- POSIX互換プラットフォーム(SolarisやLinuxなど)では、まずプロセスID(pid)を
ps -ef | grep java
kill -3 <pid> 2>&1
- Windowsでは、スレッドダンプの採取方法は以下の通りです。
- beasvcを利用する (WebLogic Server 10.3.5まで):
beasvc -dump -svcname:<service_name>
- <service_name>はサーバーインスタンスを実行するWindowsサービスです(例:mydomain_myserver)
- wlsvcを利用する(10.3.6、12.1.1から)
wlsvc -dump -svcname:<service_name> -log
- WLSTを使う
setDomain.cmd もしくは setDomain.sh java weblogic.WLST connect("<username>","<password>","t3://<url>:<port>") threadDump()
Note 1274713.1では、WLSTスレッドダンプの詳細(各ダンプの時間間隔の設定方法やスレッドダンプ採取回数の設定など)について説明とサンプルがあります。
How To Take Thread Dumps With WLST (Doc ID 1274713.1)(My Oracle Supportのアカウントが必要です)
https://support.oracle.com/epmos/faces/DocContentDisplay?id=1274713.1 - WebLogic Server 9.0までであれば、コマンドラインもしくはシェルから、スレッドダンプを以下のコマンドで生成することができます。
setDomain.cmd もしくは setDomain.sh java weblogic.Admin <url>:<port> -username <username> -password <password> THREAD_DUMP
- WebLogic Server管理コンソールから、[サーバー]>[サーバー名]>[監視]>[スレッド]とたどり、[スレッドスタックのダンプ]をクリックするとスレッドダンプを生成できます。この方法の場合、スレッドダンプが切り捨てられたり、不完全なものができる場合があります。
- WebLogic ServerをWindowsサービスとして実行している場合、サービス管理ツールからスレッドダンプを生成することができます。詳しくはMy Oracle Supportからサポートドキュメントをご覧下さい。
Collect thread dump in GUI mode when WebLogic Server is running as Windows Service (Doc ID 1348645.1)
https://support.oracle.com/epmos/faces/DocContentDisplay?id=1348645.1 - Java VisualVMを使い、スレッドダンプをアプリケーション実行中に取得することも可能です。詳細は以下のリンクをご覧下さい。
Java VisualVM - Working with Local Applications
http://docs.oracle.com/javase/6/docs/technotes/guides/visualvm/applications_local.html - jstackを使ってスレッドダンプを取得します。
jstack <pid>
jstack -l <pid>
- JRockit Mission Controlをお使いの場合、jrcmdを使って取得することができます。
jrcmd <pid> print_threads
- (訳者による追加)JDK 7の場合(7u4以後)、jcmdを使って取得することができます。
jcmd <pid> Thread.print
0 件のコメント:
コメントを投稿