7

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

4

7 回答 7

6

有一个 JBoss 特定的方法,它对用户更加友好:

http://community.jboss.org/wiki/GenerateAThreadDumpWithTheJMXConsole

当您无法直接访问主机(“kill”需要)时,这尤其有用。

于 2008-09-12T21:40:41.130 回答
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 悬线

CW 线程等待条件变量

MW 线程等待监视器锁

MS 线程挂起等待监视器锁”

于 2008-09-12T19:43:29.803 回答
1

此处找到的 stacktrace 应用程序也很有用,尤其是在未从命令行启动 java 应用程序的 Windows 机器上。

于 2008-09-13T02:17:35.067 回答
1

Thread.getAllStackTraces()(从 Java 1.5 开始)

于 2012-07-26T21:54:46.580 回答
1

两种选择:

选项 1 使用 JMX 控制台生成线程转储

为了生成线程转储:

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

笔记:

如果您使用的是 Internet Explorer,您应该使用它File > Save As来保存输出,而不是将数据复制到文本编辑器。由于某种原因,当您从 Internet Explorer 复制文本时,不会复制换行符,并且所有输出都以一行结束。

选项 2 使用 Twiddle 生成线程转储

或者,您可以使用 twiddle 执行该listThreadDump()方法并将返回的 HTML 直接通过管道传输到文件。使用这个命令行:

<JBOSS_HOME>/bin/twiddle invoke "jboss.system:type=ServerInfo" listThreadDump > threads.html
于 2013-05-21T08:09:18.850 回答
0

有时 JBoss 锁定太多,甚至 jmx-concole 都没有响应。在这种情况下,在 Linux 上使用 kill -3,在 Windows 上使用SendSignal

于 2011-04-19T18:19:57.183 回答
0

https://community.jboss.org/wiki/ThreadDumpJSP页面具有独立的自包含 threaddump.war,可以在没有 JMX 的情况下使用。

于 2013-05-27T05:36:45.207 回答