[WLS, Java] Different ways to take thread dumps in WebLogic Server

原文はこちら。
https://blogs.oracle.com/vijaya/entry/different_ways_to_take_thread

WebLogic Serverでスレッドダンプを取る方法あれこれ

WebLogic Server (WLS) およびJavaでは様々な方法でスレッドダンプを取ることができます。その方法の詳細を以下にまとめました。スレッドダンプ採取にあたっては、Javaクラスや管理コンソールではなく、OSコマンドを使うことを常に推奨します。それは、管理コンソールがハングアップした場合、ユーザーが接続できずスレッドダンプを採取できなくなるからです。
  1. WebLogic Serverをコマンドラインスクリプトから立ち上げている場合、OSコマンドを使いスレッドダンプを取得する。
    • Windowsでは、スレッドダンプの採取方法は以下の通りです。
      スレッドダンプをサーバーの標準出力に生成する
      <ctrl>+<break>
    • POSIX互換プラットフォーム(SolarisやLinuxなど)では、まずプロセスID(pid)を
      ps -ef | grep java
      で特定した上で、以下のコマンドを発行します。
      kill -3 <pid> 2>&1
      シグナル3はSIGQUITと等価です。Solarisの場合、スレッドダンプを現在のシェルで生成しますが、Linuxではpidによって特定されたJavaプロセスを開始したシェルにスレッドダンプが生成されます。
  2. beasvcを利用する (WebLogic Server 10.3.5まで):
    beasvc -dump -svcname:<service_name>
    • <service_name>はサーバーインスタンスを実行するWindowsサービスです(例:mydomain_myserver)
  3. wlsvcを利用する(10.3.6、12.1.1から)
    wlsvc -dump -svcname:<service_name> -log
  4. WLSTを使う
    setDomain.cmd もしくは setDomain.sh
    java weblogic.WLST
    connect("<username>","<password>","t3://<url>:<port>")
    threadDump()
    スレッドダンプをThread_Dump_AdminServer.txtに出力します。
    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
  5. WebLogic Server 9.0までであれば、コマンドラインもしくはシェルから、スレッドダンプを以下のコマンドで生成することができます。
    setDomain.cmd もしくは setDomain.sh
    java weblogic.Admin <url>:<port> -username <username> -password <password> THREAD_DUMP
    スレッドダンプを指定したサーバー標準出力先に生成します。
  6. WebLogic Server管理コンソールから、[サーバー]>[サーバー名]>[監視]>[スレッド]とたどり、[スレッドスタックのダンプ]をクリックするとスレッドダンプを生成できます。この方法の場合、スレッドダンプが切り捨てられたり、不完全なものができる場合があります。

  7. 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
  8. Java VisualVMを使い、スレッドダンプをアプリケーション実行中に取得することも可能です。詳細は以下のリンクをご覧下さい。
    Java VisualVM - Working with Local Applications
    http://docs.oracle.com/javase/6/docs/technotes/guides/visualvm/applications_local.html
  9. jstackを使ってスレッドダンプを取得します。
    jstack <pid>
    ロックに関する追加情報を表示したい場合は
    jstack -l <pid>
  10. JRockit Mission Controlをお使いの場合、jrcmdを使って取得することができます。
    jrcmd <pid> print_threads
  11. (訳者による追加)JDK 7の場合(7u4以後)、jcmdを使って取得することができます。
    jcmd <pid> Thread.print

0 件のコメント:

コメントを投稿