77#
88# @author Jerry Lee
99
10- PROG=` basename $0 `
10+ readonly PROG=` basename $0 `
1111
1212usage () {
1313 cat << EOF
2424 exit $1
2525}
2626
27- ARGS=` getopt -n " $PROG " -a -o c:p:h -l count:,pid:,help -- " $@ " `
27+ readonly ARGS=` getopt -n " $PROG " -a -o c:p:h -l count:,pid:,help -- " $@ " `
2828[ $? -ne 0 ] && usage 1
2929eval set -- " ${ARGS} "
3030
@@ -75,23 +75,25 @@ if ! which jstack &> /dev/null; then
7575 export PATH=" $JAVA_HOME /bin:$PATH "
7676fi
7777
78- uuid=` date +%s` _${RANDOM} _$$
78+ readonly uuid=` date +%s` _${RANDOM} _$$
7979
8080cleanupWhenExit () {
8181 rm /tmp/${uuid} _* & > /dev/null
8282}
8383trap " cleanupWhenExit" EXIT
8484
8585printStackOfThread () {
86+ local threadLine
87+ local count=1
8688 while read threadLine ; do
87- pid=` echo ${threadLine} | awk ' {print $1}' `
88- threadId=` echo ${threadLine} | awk ' {print $2}' `
89- threadId0x=` printf %x ${threadId} `
90- user=` echo ${threadLine} | awk ' {print $3}' `
91- pcpu=` echo ${threadLine} | awk ' {print $5}' `
92-
93- jstackFile=/tmp/${uuid} _${pid}
94-
89+ local pid=` echo ${threadLine} | awk ' {print $1}' `
90+ local threadId=` echo ${threadLine} | awk ' {print $2}' `
91+ local threadId0x=` printf %x ${threadId} `
92+ local user=` echo ${threadLine} | awk ' {print $3}' `
93+ local pcpu=` echo ${threadLine} | awk ' {print $5}' `
94+
95+ local jstackFile=/tmp/${uuid} _${pid}
96+
9597 [ ! -f " ${jstackFile} " ] && {
9698 jstack ${pid} > ${jstackFile} || {
9799 redEcho " Fail to jstack java process ${pid} !"
@@ -100,7 +102,7 @@ printStackOfThread() {
100102 }
101103 }
102104
103- redEcho " Busy(${pcpu} %) thread(${threadId} /0x${threadId0x} ) stack of java process(${pid} ) under user(${user} ):"
105+ redEcho " [ $(( count ++ )) ] Busy(${pcpu} %) thread(${threadId} /0x${threadId0x} ) stack of java process(${pid} ) under user(${user} ):"
104106 sed " /nid=0x${threadId0x} /,/^$/p" -n ${jstackFile}
105107 done
106108}
@@ -110,4 +112,3 @@ ps -Leo pid,lwp,user,comm,pcpu --no-headers | {
110112 awk ' $4=="java"{print $0}' ||
111113 awk -v " pid=${pid} " ' $1==pid,$4=="java"{print $0}'
112114} | sort -k5 -r -n | head --lines " ${count} " | printStackOfThread
113-
0 commit comments