我也想这样走
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
参数的摘要中,引用文献指出:
To get a list of Java processes running on a machine, use the jps(1) command.
大概,如果您有可用的 jstack
,那么您也有 jps
。文档建议您可以使用 jps -q 来获取仅相关 pid 的列表,因此您不需要进行处理。鉴于此,您可以在 bash 中执行类似的操作:
for vmpid in $(jps -q); do
jstack $vmpid
done
显然jps
是用Java实现的,因为我发现它会 self 报告。如果这让您烦恼,那么可以调整上面的内容以过滤掉 jps
本身。
关于java - 有没有一种简单的方法为每个运行的jvm生成jstack?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36364706/