簡體   English   中英

使用jstack進行線程轉儲

[英]Taking thread dump using jstack

我想生成一個自動線程轉儲。 這是我正在使用的腳本。

    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

當我這樣做時,這就是我在線程轉儲日志文件中看到的內容。

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進行線程轉儲嗎?

我沒有直接的答案,但是我認為您為獲取PID所做的shell-foo-magic可能是錯誤的。 因此,您能否在pid = ...行之后直接添加“ echo $ PID”並顯示輸出。 因為直接使用'jstack'對我來說很好。

您不能給jstack多個pid,而應該給它一個java進程的pid。 這樣的事情應該起作用:

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

或更簡單地說:

for pid in $(jps | sed 's/^\([0-9][0-9]*\) .*$/\1/'); do
  jstack $pid >> $THREADDUMP_LOG_FILE
done

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM