一个独立的Java应用程序的线程转储

时间:2012-03-14 10:14:11

标签: java

我有一个独立的java应用程序在linux + Java 6上运行,似乎卡住了(没有生成日志) 如何在不使用任何其他工具(例如jstack)的情况下进行线程转储

尝试以下命令,但他们没有做任何事情

kill -3 <pid>
kill -QUIT <pid>

我错过了什么吗?

2 个答案:

答案 0 :(得分:0)

您可以使用Java VisualVM(包含在每个JDK的bin目录中)并通过JMX连接。只需添加

-Dcom.sun.management.jmxremote.port=PORT
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false

到您的JVM启动参数(在远程主机上)并启用身份验证。

然后启动VisualVM(在您的客户端)并添加连接。

见这里:http://visualvm.java.net/docindex.html

答案 1 :(得分:0)

jps命令获取pid(虽然没有必要)。

您是否尝试过root权限?如果使用root(或守护程序)权限启动java进程,则必须考虑到这一点。

# kill -3 <pid>
$ sudo kill -QUIT <pid>

您还可以按top(而非H)查看h输出中的主题。

然后,如果您确定卡住了,您可以抓住pid,生成十六进制,然后使用jstack查看堆栈跟踪。

问候。