如何从正在运行的JBoss实例生成和分析线程转储?

时间:2008-09-12 19:16:58

标签: java multithreading dump

如何从正在运行的JBoss实例生成和分析线程转储?

7 个答案:

答案 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控制台生成线程转储

为了生成线程转储:

  1. 打开JMXConsole(例如:http://localhost:8080
  2. 导航到jboss.system:type=ServerInfo mbean( 提示: 您可能只需CTRL-F并在对话框中输入type = ServerInfo)
  3. 单击Server Info mbean的链接。
  4. 导航至listThreadDump
  5. 所在的底部
  6. 点击它并获取您的主题转储
  7. 注意:

    如果您使用的是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的情况下使用。