关于 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

Thread_Dump.jpg

关于作者

Joy_pool.jpg
原文链接:http://middlewaremagic.com/weblogic/?p=823

发布了273 篇原创文章 · 获赞 1324 · 访问量 649万+

猜你喜欢

转载自blog.csdn.net/defonds/article/details/104332560