当前位置: 首页 > 知识库问答 >
问题:

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

拓拔安邦
2023-03-14

昨天,我们在Debian上运行的Tomcat6服务器出现了一个奇怪的问题:我们出现了第二次长时间的冻结/停机,随着时间的推移,时间越来越长。在冻结期,我们所有的独立网络应用程序都没有反应。停机有很高的规律性,在一个小时内,停机阶段变得比活动阶段更长,直到我们重新启动服务器解决了问题。现在我们想找出它是什么,或者找到一个解决方案,如果它再次发生!

在每个中断阶段,24个内核中的一个100%被tomcat线程使用,所以我们假设该线程所做的一切都冻结了整个tomcat。可悲的是,我们不知道线程在做什么。今天,我研究了一个获取java线程TID的解决方案,发现了一个很好的解决方案:获取Linux中java线程的线程ID。

将它放在我们广泛的日志文件条目中并找到JVM线程将非常容易,但是如果它是一个不完全在我们控制之下的线程呢?那么拥有同步的TID/Java-Thread-ID快照的烦恼又如何呢?这就引出了我的核心问题:

有没有办法从已知的Linux TID中获取JVM线程名/ID?

我的希望很小,但可能存在对JVM的跨进程调用或其他我尚未考虑的想法。

我们在该服务器上运行Yourkit探查器,但在中断阶段它无法记录任何内容,因此我们无法找到违规线程。

共有1个答案

邢和光
2023-03-14

使用JStack

"Thread-0" prio=10 tid=0x00002aaab01c3800 nid=0x246d runnable [0x00000000423c7000]
    ^ name             ^ Java thread id       ^ native (OS) thread id
 类似资料:
  • 问题内容: 有什么办法可以在Python中按进程名称获取PID? 例如,我需要获得通过。 问题答案: 你可以使用进程的名字来的PID 通过subprocess.check_output: 将运行命令为, 如果返回码非零,则会引发CalledProcessError。 要处理多个条目并转换为整数: 在[21]中:get_pid(“ chrome”) 或者通过标记获取单个pid:

  • 问题内容: 这应该很简单,但我只是没有看到。 如果我有一个进程ID,该如何使用它来获取有关该进程的信息,例如进程名称。 问题答案: 在Linux下,您可以读取proc文件系统。文件包含命令行。

  • 问题内容: 几个具有相同名称的进程正在主机上运行。使用 python 或 jython 按名称获取那些进程的PID的跨平台方法是什么? 我想要类似但在python中的东西。(我没有。) 我无法解析,因为它可能不可用(在HP-UX上)。 我不想运行并解析输出,因为我认为它很丑陋(不同操作系统中的字段顺序可能不同)。 目标平台是Solaris,HP-UX,也许还有其他平台。 问题答案: 您可以使用在W

  • 问题内容: 有时,当我尝试启动Firefox时,它会显示“ Firefox进程已在运行”。所以我必须这样做: 我想要的是一个可以为我完成所有任务的命令。它会在进程列表中使用一个输入字符串并将其(或其他内容)放入其中,并杀死输出中的所有进程: 我尝试在PHP中执行此操作,但似乎只显示已在PHP脚本本身中执行过的进程(因此,它显示的唯一进程是其自身。) 问题答案: 详细信息:http : //linu

  • 问题内容: 我想知道是否有一种功能或某种与之等效的方法。 问题答案: 您的函数名称中缺少。返回元素的集合,这些元素需要迭代: IE8及以下版本不支持,因此您必须找到一个polyfill或使用(IE8)。

  • 问题内容: 使用JavaScript,我们可以使用以下语法通过id获取元素: 我尝试以下按类获取元素: 但这导致了错误: 如何按类获取元素? 问题答案: DOM函数的名称实际上不是,仅仅是因为页面上的多个元素可以具有同一类,因此:。 此方法的返回值将是NodeList实例,或者是(FF的超集,例如返回的实例)。无论如何:返回值是一个类似于数组的对象: 如果由于某种原因需要返回对象作为数组,则由于其