首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用jstack获取线程转储

使用jstack获取线程转储
EN

Stack Overflow用户
提问于 2014-02-18 17:04:42
回答 2查看 2.3K关注 0票数 0

我想生成一个自动线程转储。这就是我正在使用的脚本。

代码语言:javascript
复制
    THREADDUMP_LOG_FILE="/tmp/tmpLog_`date +"%Y%m%d%H%M%S"`"
    pid=`ps axww | grep -v grep | sed -e 's/^[ ]*//g' | sed -e 's/[ ][ ]*/ /g' | cut -f1 -d' ' `
    $JAVA_HOME/bin/jstack $pid >> $THREADDUMP_LOG_FILE

当我这样做时,这是我在线程转储日志文件中看到的。

代码语言:javascript
复制
Usage:
jstack [-l] <pid>
    (to connect to running process)
jstack -F [-m] [-l] <pid>
    (to connect to a hung process)
jstack [-m] [-l] <executable> <core>
    (to connect to a core file)
jstack [-m] [-l] [server_id@]<remote server IP or hostname>
    (to connect to a remote debug server)

Options:
    -F  to force a thread dump. Use when jstack <pid> does not respond (process is hung)
    -m  to print both java and native frames (mixed mode)
    -l  long listing. Prints additional information about locks
    -h or -help to print this help message

很明显,我做错了什么。有人能在这里指导我如何使用jstack进行线程转储吗?

EN

回答 2

Stack Overflow用户

发布于 2014-02-18 17:09:08

我没有直接的答案,但我假设您为获取PID而执行的shell-foo-magic可能是错误的。因此,您可以在pid=后面直接添加一个'echo $PID‘吗?行并显示输出。因为直接使用'jstack‘对我来说没问题。

票数 1
EN

Stack Overflow用户

发布于 2014-12-10 01:37:40

你不能给jstack一个以上的pid,你应该只给它一个java process的pid。像这样的东西应该是有效的:

代码语言:javascript
复制
for pid in $(ps axww | grep ' java' |grep -v grep | sed -e 's/^[ ]*//g' | sed -e 's/[ ][ ]*/ /g' | cut -f1 -d' '); do
  jstack $pid >> $THREADDUMP_LOG_FILE
done

或者更简单地说:

代码语言:javascript
复制
for pid in $(jps | sed 's/^\([0-9][0-9]*\) .*$/\1/'); do
  jstack $pid >> $THREADDUMP_LOG_FILE
done
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21848713

复制
相关文章

相似问题

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