一尘不染

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

tomcat

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

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

将其放入我们广泛的日志文件条目中并找到JVM线程将很容易,但是如果它是一个不受我们完全控制的线程怎么办?同步TID / Java-Thread-
ID快照带来的烦恼又如何呢?这就引出了我的核心问题:

是否有办法从已知的Linux TID获取JVM线程名称/ ID?

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

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


阅读 672

收藏
2020-06-16

共1个答案

一尘不染

采用 jstack <PID>

"Thread-0" prio=10 tid=0x00002aaab01c3800 nid=0x246d runnable [0x00000000423c7000]
    ^ name             ^ Java thread id       ^ native (OS) thread id
2020-06-16