如何从正在运行的JBoss实例生成和分析线程转储?
答案 0 :(得分:6)
有一种特定于JBoss的方法更加用户友好:
http://community.jboss.org/wiki/GenerateAThreadDumpWithTheJMXConsole
当您无法直接访问主机(“kill”需要)时,此功能特别有用。
答案 1 :(得分:4)
http://java.sun.com/developer/technicalArticles/Programming/Stacktrace/
...
“在UNIX平台上,您可以使用kill命令向程序发送信号。这是退出信号,由JVM处理。例如,在Solaris上,您可以使用命令kill -QUIT process_id,其中process_id是Java程序的进程号。
或者,您可以在启动Java程序的窗口中输入键序列< ctrl> \。发送此信号指示JVM中的信号处理程序,以递归方式打印出JVM内线程和监视器上的所有信息。“
...
“确定线程状态
您将在JVM堆栈跟踪的快照中看到许多不同状态的许多不同线程。使用的密钥是:
R正在运行或可运行的线程
S Suspended thread
CW线程等待条件变量
MW线程等待监视器锁定
MS线程暂停等待监视器锁“
答案 2 :(得分:1)
找到的堆栈跟踪应用程序here也很有用,尤其是在没有从命令行启动java应用程序的Windows机器上。
答案 3 :(得分:1)
Thread.getAllStackTraces()(自Java 1.5开始)
答案 4 :(得分:1)
两个选项:
选项1 使用JMX控制台生成线程转储
为了生成线程转储:
http://localhost:8080
)jboss.system:type=ServerInfo
mbean( 提示: 您可能只需CTRL-F并在对话框中输入type = ServerInfo)listThreadDump
注意:
如果您使用的是Internet Explorer,则应使用File > Save As
保存输出,而不是将数据复制到文本编辑器。出于某种原因,当您从Internet Explorer复制文本时,不会复制换行符,并且所有输出都会在一行上结束。
选项2 使用Twiddle生成线程转储
或者,您可以使用旋转来执行listThreadDump()
方法并将返回的HTML直接传递给文件。使用此命令行:
<JBOSS_HOME>/bin/twiddle invoke "jboss.system:type=ServerInfo" listThreadDump > threads.html
答案 5 :(得分:0)
有时JBoss锁定太多,甚至jmx-concole也没有响应。 在这种情况下,在Linux上使用kill -3,在Windows上使用SendSignal。
答案 6 :(得分:0)
https://community.jboss.org/wiki/ThreadDumpJSP页面提供独立的自包含threaddump.war,可以在没有JMX的情况下使用。