Java 调试挂起的进程

Java 调试挂起的进程,java,debugging,strace,Java,Debugging,Strace,我正在尝试调试挂起的java进程。它对大多数JDK工具(如jstats、jmap等)没有响应 以下是strace的输出: $ sudo strace -p <pid> futex(0x7f14bb42a9d0, FUTEX_WAIT, 6090, NULL <unfinished ...> $sudo strace-p futex(0x7f14bb42a9d0,futex_等待,6090,空 wchan的产量: $ sudo cat /proc/<pid>

我正在尝试调试挂起的java进程。它对大多数JDK工具(如jstats、jmap等)没有响应

以下是strace的输出:

$ sudo strace -p <pid>
futex(0x7f14bb42a9d0, FUTEX_WAIT, 6090, NULL <unfinished ...>
$sudo strace-p
futex(0x7f14bb42a9d0,futex_等待,6090,空
wchan的产量:

$ sudo cat /proc/<pid>/wchan          
futex_wait_queue_me%  

$sudo strace -f -p <pid>
Process <pid> attached with 15 threads - interrupt to quit
[pid  6105] futex(0x7f14b40cb954, FUTEX_WAIT_PRIVATE, 1, NULL <unfinished ...>
[pid  6102] futex(0x7f14ba81e860, FUTEX_WAIT_PRIVATE, 0, NULL <unfinished ...>
[pid  6101] futex(0x7f14b408aa54, FUTEX_WAIT_PRIVATE, 43, NULL <unfinished ...>
[pid  6100] futex(0x7f14b4085f54, FUTEX_WAIT_PRIVATE, 43, NULL <unfinished ...>
[pid  6074] futex(0x7f14bb42a9d0, FUTEX_WAIT, 6090, NULL    
$sudo cat/proc//wchan
futex\u等待\u排队\u我%
$sudo strace-f-p
进程附加15个线程-中断退出
[pid 6105]futex(0x7f14b40cb954,futex_WAIT_PRIVATE,1,空
[pid 6102]futex(0x7f14ba81e860,futex_WAIT_PRIVATE,0,空
[pid 6101]futex(0x7f14b408aa54,futex_WAIT_PRIVATE,43,空
[pid 6100]futex(0x7f14b4085f54,futex_WAIT_PRIVATE,43,空
[pid 6074]futex(0x7f14bb42a9d0,futex_等待,6090,空
有关流程的其他重要信息:

  • 它在cgexec下运行

需要关于如何找到此进程挂起问题的根本原因的指针。

一种方法是获取线程转储并分析它是否存在死锁,查找被阻止的线程并确定它们被阻止的资源。 如果是Oracle hotspot VM,则可以运行其他几个实用程序来检查死锁检测。如果进程没有响应,则可以强制进程转储stacktrace(线程转储)。 阅读有关Oracel JVM疑难解答的更多信息。

strace-f-p显示了什么?@exussum用strace-f-p的输出更新了问题,如问题中所述,使用jstack的线程转储失败。此外,我不想终止进程,因为这种挂起不容易重新启动。你可以试试,kill-3 pid,它不会终止进程。如果你的进程运行在像tanuki这样的包装器中,它会重定向进程线程转储到包装器日志,而不是控制台。如果服务器机器配置为将stdout重定向到dev/null,则也不会看到输出。