首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一种简单的方法可以为每个运行中的jvm生成一个j堆栈?

是否有一种简单的方法可以为每个运行中的jvm生成一个j堆栈?
EN

Stack Overflow用户
提问于 2016-04-01 19:48:50
回答 2查看 1.6K关注 0票数 0

我想这样走

J堆栈全部

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

能办到吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-01 20:12:18

J堆栈命令引用提供了以下三种调用形式:

J堆栈选项pid j堆栈选项可执行核心j堆栈选项远程主机名或IP

其中,只有第一个与当前运行jstack的系统上运行的JVM相关。因此,您必须通过它们的pids来标识JVM进程。

在对pid论点的总结中,参考说明:

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

想必,如果您有可用的jstack,那么您也有jps。这些文档建议您可以使用jps -q只获得相关pids的列表,因此不需要进行按摩。考虑到这一点,您可以在bash中这样做

代码语言:javascript
复制
for vmpid in $(jps -q); do
  jstack $vmpid
done

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

票数 2
EN

Stack Overflow用户

发布于 2016-04-01 20:02:58

您可以在您的终端中运行以下命令:

代码语言:javascript
复制
ps -e  | grep [j]ava  | awk '{print $1}' | xargs -n 1 jstack
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36364706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档