我想这样走

jstack全部

或类似的东西,这样我就可以获取系统上所有jvm的线程转储。

能做到吗

最佳答案

jstack command reference提供以下三种调用形式:


jstack [ options ] pid

jstack [ options ] executable core

jstack [ options ] [ server-id@ ] remote-hostname-or-IP



其中,只有第一个与jstack在同一系统上运行的JVM有关。因此,您必须通过其pid标识JVM进程。

pid参数的摘要中,参考文献指出:


  要获取机器上运行的Java进程的列表,请使用jps(1)命令。


大概,如果您有jstack可用,那么您也有jps。该文档建议您可以使用jps -q以获得仅相关pid的列表,因此您无需进行按摩。鉴于此,您可以在bash中执行以下操作:

for vmpid in $(jps -q); do
  jstack $vmpid
done


显然jps是用Java实现的,因为我发现它是关于它自己的报告。如果那让您感到困扰,则可以对以上内容进行调整以过滤掉jps本身。

10-04 12:48