关于 JVM 的线程 Dump 文件的提取
线程 DUMP 是用以分析服务器 / JVM 挂起以及定位其原因最重要的 JVM 报告之一…本文介绍几种收集线程 DUMP 的常见技巧…
注意:仅仅收集 JVM 中一两个线程的 DUMP 并没有太大用处。所以最好是在 10 - 12 秒内最少收集到 5 - 6 个线程栈快照…
选项一。Windows 下:在服务运行的命令窗口下同时按 Ctrl + Break。
Solaris/Linux 等 Unix 系系统中需要找到服务进程 ID,可以通过执行以下命令来查找运行服务的 ID:
A). ps -ef | grep java
qProcessbox 20650 1 0 Mar 26 ? 104:51 /opt/app/qProcessbox/java/jdk1.5.0_22/bin/java
B). kill -3
线程栈快照的输出将在服务输出目录下生成。
选项二。我们可以使用已经 deprecated 的 “weblogic.Admin”。虽然已经被定义为 deprecated 但目前或者将来仍旧可以使用,而且我认为其仍不失为管理员们最好用的调试工具之一。
java weblogic.Admin -url t3://AdminHostName:7001 -username weblogic -password weblogic THREAD_DUMP
java weblogic.Admin -url t3://MS1HostName:7003 -username weblogic -password weblogic THREAD_DUMP
java weblogic.Admin -url t3://MS2HostName:7005 -username weblogic -password weblogic THREAD_DUMP
线程栈快照的输出将在服务输出目录下生成。如果你想在服务器日志中也可以看到线程栈信息,可以在 jvm 启动参数中加入 -Dweblogic.log.RedirectStdoutToServerLogEnabled=true:
java weblogic.Admin -url t3://MS2HostName:7005 -username weblogic -password weblogic SERVERLOG
选项三。通过 WLST。写一个类似于 “AdminThreadDump.py” 的脚本。
connect('weblogic','weblogic','t3://localhost:7001')
cd ('Servers')
ls()
cd ('AdminServer')
ls()
threadDump()
cd('..')
cd('ManagedServerOne')
threadDump()
然后打开一个命令行执行 “setWLSEnv.sh”,然后就可以执行该 WLST 脚本了:
java weblogic.WLST AdminThreadDump.py
或
java weblogic.WLST /opt/bea/MyScripts/AdminThreadDump.py
选项四。获取线程栈快照最简单的选项:
登录 Weblogic 控制台 -> Server -> Monitoring -> Threads
选项五。使用 JMX “JVMRuntimeMBean” 收集线程栈快照。
选项六。使用 T3ServicesDef 获取线程栈快照。
选项七。使用 Jstack 工具收集线程栈快照。
选项八。如果你已经将 WebLogic 服务定义为一个 Windows 服务,你还可以参考 http://middlewaremagic.com/weblogic/?p=823#comment-1011。
选项九。使用以下命令获取已包括线程栈快照的 JVM 详细信息 (堆栈大小、JDK 详情、系统详情):
java weblogic.Admin -url t3://ServerHostName:7001 -username weblogic -password weblogic GET -pretty -type JVMRuntime