如何通过已知的PID / TID获得JVM线程名称/ ID

昨天,我们在Debian上运行的tomcat

6服务器出现了一个奇怪的问题:随着时间的推移,第二次长时间冻结/中断的时间增加了。在冻结期,我们所有独立的Web应用程序都没有响应。中断具有很高的规律性,在一个小时的过程中,中断阶段变得比活动阶段更长,直到我们重新启动服务器以解决问题为止。现在,我们想找出它是什么,或者找到一种解决方案来找出它再次发生的情况!

在每个中断阶段,tomcat线程之一会100%使用24个内核中的一个,因此我们假设该线程所做的任何事情都会冻结整个tomcat。可悲的是,我们不知道该线程正在处理什么。

将其放入我们广泛的日志文件条目中并找到JVM线程将很容易,但是如果它是一个不受我们完全控制的线程怎么办?同步TID / Java-Thread-

ID快照带来的烦恼又如何呢?这就引出了我的核心问题:

我的希望很小,但是也许对JVM有一个跨进程调用,或者还有一个我尚未考虑的想法。

我们已经在该服务器上运行了Yourkit探查器,但是在中断阶段,它无法记录任何内容,因此我们找不到有问题的线程。

回答:

采用 jstack <PID>

"Thread-0" prio=10 tid=0x00002aaab01c3800 nid=0x246d runnable [0x00000000423c7000]

^ name ^ Java thread id ^ native (OS) thread id

以上是 如何通过已知的PID / TID获得JVM线程名称/ ID 的全部内容, 来源链接: utcz.com/qa/425918.html

回到顶部