我想这样走
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
本身。