java - 有没有一种简单的方法为每个运行的jvm生成jstack?

标签 java bash thread-dump

我也想这样走

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/

相关文章:

Java 线程转储 : BLOCKED thread without "waiting to lock ..."

java - 当几乎所有线程都处于 NATIVE 状态时 ThreadDump 问题

java - 创建连接到 HBaseTestingUtility 的 HBaseAdmin

java - SQLite如何为未知列数量构建数据库模式(多个表?)

java - Eclipse 中 10000x10000 int 数组出现 OutOfMemoryError

java - 重构自动检测文件的编码

bash - 如何使用特定选项限制 git 命令?

java - Tomcat 线程转储

linux - 替换/插入一行到文件末尾

git 从整个历史记录中删除所有已删除的文件