我有一个独立的java应用程序在linux + Java 6上运行,似乎卡住了(没有生成日志) 如何在不使用任何其他工具(例如jstack)的情况下进行线程转储
尝试以下命令,但他们没有做任何事情
kill -3 <pid>
kill -QUIT <pid>
我错过了什么吗?
答案 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(在您的客户端)并添加连接。
答案 1 :(得分:0)
从jps
命令获取pid(虽然没有必要)。
您是否尝试过root权限?如果使用root(或守护程序)权限启动java进程,则必须考虑到这一点。
# kill -3 <pid>
$ sudo kill -QUIT <pid>
您还可以按top
(而非H
)查看h
输出中的主题。
然后,如果您确定卡住了,您可以抓住pid,生成十六进制,然后使用jstack
查看堆栈跟踪。
问候。