cpu飚高分析
cpu飚高分析
#!/bin/bash
# utf-8
# description: 分析java进程cpu飚高,打出具体的线程栈
# get javaHome
function GetJavaHome(){
javaHome=$(ps -ef | grep java | grep -v jcollector | grep -v grep | head -1 | awk "{print \$8}" 2>/dev/null)
javaHome=$(echo $javaHome | sed 's#/java##g')
if [[ -z $javaHome ]];then
javaHome=$(echo $JAVA_BIN)
fi
}
# command
function InitCommands(){
jstackCommand="${javaHome}/jstack"
jmapCommand="${javaHome}/jmap"
jstatCommand="${javaHome}/jstat"
}
# top
function PrintTopInfo(){
echo "当前top信息如下"
/usr/bin/top -b -n 1
echo "##############################################"
}
# pids
function GetJavaPids(){
pids=$(ps -ef | grep java | grep -v jcollector | grep -v grep | awk "{print \$2}")
echo $pids
}
function GetJavaBaseInfo(){
local pid=$1
appName=$(ps -ef | grep $pid | grep -v grep | awk "{print \$(NF-1)}")
echo "应用名:${appName}"
echo "pid:$pid"
echo "##############################################"
}
function GetThreadInfo(){
local pid=$1
threadNum=$(ps p ${pid} -L -o pcpu,pid,tid,time,tname,stat,psr | /bin/sort -n -k1 -r | wc -l 2>/dev/null)
echo "线程数:$threadNum"
echo "线程情况如下,按照占用cpu由大到小排列"
ps p ${pid} -L -o pcpu,pid,tid,time,tname,stat,psr | /bin/sort -n -k1 -r 2>/dev/null
echo "占用最高的cpu线程数为:"
cpuHighThreadInfo=$(ps p ${pid} -L -o pcpu,pid,tid,time,tname,stat,psr | /bin/sort -n -k1 -r 2>/dev/null)
cpuHighThreadId=$(echo $cpuHighThreadInfo | head -1 | awk '{print $3}')
echo "$cpuHighThreadId"
echo "转换为16进制如下:"
cpuHighThreadId16=$(printf "%x\n" ${cpuHighThreadId})
echo $cpuHighThreadId16
echo "所有线程信息:"
${jstackCommand} -F $pid | grep -A 50 ${cpuHighThreadId16}
}
function GetInfo(){
pids=$(GetJavaPids)
for pid in $pids
do
GetJavaBaseInfo ${pid}
GetThreadInfo ${pid}
done
}
function main(){
GetJavaHome
InitCommands
echo "使用分析工具版本:${javaHome}"
GetInfo
}
main
原创:做时间的朋友
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2022-11-09 内存可用率
2020-11-09 java 常见OPTS参数的含义