java进程cpu使用率高_shell 分析java进程cpu使用率过高的shell脚本

下面是编程之家 jb51.cc 通过网络收集整理的代码片段。

编程之家小编现在分享给大家,也给大家做个参考。

#!/bin/bash

# @Function

# Find out the highest cpu consumed threads of java,and print the stack of these threads.

#

# @Usage

# $ ./show-busy-java-threads.sh

#

# @author Jerry Lee

PROG=`basename $0`

usage() {

cat <

Usage: ${PROG} [OPTION]...

Find out the highest cpu consumed threads of java,and print the stack of these threads.

Example: ${PROG} -c 10

Options:

-p,--pid find out the highest cpu consumed threads from the specifed java process,default from all java process.

-c,--count set the thread count to show,default is 5

-h,--help display this help and exit

EOF

exit $1

}

ARGS=`getopt -n "$PROG" -a -o c:p:h -l count:,pid:,help -- "[email protected]"`

[ $? -ne 0 ] && usage 1

eval set -- "${ARGS}"

while true; do

case "$1" in

-c|--count)

count="$2"

shift 2

;;

-p|--pid)

pid="$2"

shift 2

;;

-h|--help)

usage

;;

--)

shift

break

;;

esac

done

count=${count:-5}

redEcho() {

[ -c /dev/stdout ] && {

# if stdout is console,turn on color output.

echo -ne "\033[1;31m"

echo -n "[email protected]"

echo -e "\033[0m"

} || echo "[email protected]"

}

# Check the existence of jstack command!

if ! which jstack &> /dev/null; then

[ -z "$JAVA_HOME" ] && {

redEcho "Error: jstack not found on PATH!"

exit 1

}

! [ -f "$JAVA_HOME/bin/jstack" ] && {

redEcho "Error: jstack not found on PATH and $JAVA_HOME/bin/jstack file does NOT exists!"

exit 1

}

! [ -x "$JAVA_HOME/bin/jstack" ] && {

redEcho "Error: jstack not found on PATH and $JAVA_HOME/bin/jstack is NOT executalbe!"

exit 1

}

export PATH="$JAVA_HOME/bin:$PATH"

fi

uuid=`date +%s`_${RANDOM}_$$

cleanupWhenExit() {

rm /tmp/${uuid}_* &> /dev/null

}

trap "cleanupWhenExit" EXIT

printStackOfThread() {

while read threadLine ; do

pid=`echo ${threadLine} | awk '{print $1}'`

threadId=`echo ${threadLine} | awk '{print $2}'`

threadId0x=`printf %x ${threadId}`

user=`echo ${threadLine} | awk '{print $3}'`

pcpu=`echo ${threadLine} | awk '{print $5}'`

jstackFile=/tmp/${uuid}_${pid}

[ ! -f "${jstackFile}" ] && {

jstack ${pid} > ${jstackFile} || {

redEcho "Fail to jstack java process ${pid}!"

rm ${jstackFile}

continue

}

}

redEcho "Busy(${pcpu}%) thread(${threadId}/0x${threadId0x}) stack of java process(${pid}) under user(${user}):"

sed "/nid=0x${threadId0x} /,/^$/p" -n ${jstackFile}

done

}

ps -Leo pid,lwp,user,comm,pcpu --no-headers | {

[ -z "${pid}" ] &&

awk '$4=="java"{print $0}' ||

awk -v "pid=${pid}" '$1==pid,$4=="java"{print $0}'

} | sort -k5 -r -n | head --lines "${count}" | printStackOfThread

以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页