|
8 | 8 | # @author Jerry Lee |
9 | 9 |
|
10 | 10 | readonly PROG=`basename $0` |
| 11 | +readonly -a COMMAND_LINE=("$0" "$@") |
11 | 12 |
|
12 | 13 | usage() { |
13 | 14 | cat <<EOF |
@@ -58,6 +59,24 @@ redEcho() { |
58 | 59 | } || echo "$@" |
59 | 60 | } |
60 | 61 |
|
| 62 | +yellowEcho() { |
| 63 | + [ -c /dev/stdout ] && { |
| 64 | + # if stdout is console, turn on color output. |
| 65 | + echo -ne "\033[1;33m" |
| 66 | + echo -n "$@" |
| 67 | + echo -e "\033[0m" |
| 68 | + } || echo "$@" |
| 69 | +} |
| 70 | + |
| 71 | +blueEcho() { |
| 72 | + [ -c /dev/stdout ] && { |
| 73 | + # if stdout is console, turn on color output. |
| 74 | + echo -ne "\033[1;36m" |
| 75 | + echo -n "$@" |
| 76 | + echo -e "\033[0m" |
| 77 | + } || echo "$@" |
| 78 | +} |
| 79 | + |
61 | 80 | # Check the existence of jstack command! |
62 | 81 | if ! which jstack &> /dev/null; then |
63 | 82 | [ -z "$JAVA_HOME" ] && { |
@@ -96,18 +115,27 @@ printStackOfThread() { |
96 | 115 |
|
97 | 116 | [ ! -f "${jstackFile}" ] && { |
98 | 117 | { |
99 | | - if [ "${user}" == "${USER}" ];then |
| 118 | + if [ "${user}" == "${USER}" ]; then |
100 | 119 | jstack ${pid} > ${jstackFile} |
101 | 120 | else |
102 | | - sudo -u ${user} jstack ${pid} > ${jstackFile} |
| 121 | + if [ $UID == 0 ]; then |
| 122 | + sudo -u ${user} jstack ${pid} > ${jstackFile} |
| 123 | + else |
| 124 | + redEcho "[$((count++))] Fail to jstack Busy(${pcpu}%) thread(${threadId}/0x${threadId0x}) stack of java process(${pid}) under user(${user})." |
| 125 | + redEcho "User of java process($user) is not current user($USER), need sudo to run again:" |
| 126 | + yellowEcho " sudo ${COMMAND_LINE[@]}" |
| 127 | + echo |
| 128 | + continue |
| 129 | + fi |
103 | 130 | fi |
104 | 131 | } || { |
105 | | - redEcho "Fail to jstack java process ${pid}!" |
| 132 | + redEcho "[$((count++))] Fail to jstack Busy(${pcpu}%) thread(${threadId}/0x${threadId0x}) stack of java process(${pid}) under user(${user})." |
| 133 | + echo |
106 | 134 | rm ${jstackFile} |
107 | 135 | continue |
108 | 136 | } |
109 | 137 | } |
110 | | - redEcho "[$((count++))] Busy(${pcpu}%) thread(${threadId}/0x${threadId0x}) stack of java process(${pid}) under user(${user}):" |
| 138 | + blueEcho "[$((count++))] Busy(${pcpu}%) thread(${threadId}/0x${threadId0x}) stack of java process(${pid}) under user(${user}):" |
111 | 139 | sed "/nid=0x${threadId0x} /,/^$/p" -n ${jstackFile} |
112 | 140 | done |
113 | 141 | } |
|
0 commit comments