调试挂起的进程

时间:2017-11-04 07:58:23

标签: java debugging strace

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

以下是strace的输出:

$ sudo strace -p <pid>
futex(0x7f14bb42a9d0, FUTEX_WAIT, 6090, NULL <unfinished ...>

输出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    

有关该过程的其他重要信息:

  • 它在cgexec下运行。

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

1 个答案:

答案 0 :(得分:0)

一种方法是进行线程转储并对其进行一些死锁分析,查找被阻塞的线程并确定它们被阻止的资源。 如果是Oracle热点VM,则可以运行其他几个实用程序来检查死锁检测。如果进程没有响应,则可以强制进程转储堆栈跟踪(线程转储)。 阅读有关Oracel JVM故障排除的更多信息。 https://docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-VM/html/hangloop.html