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
posted @   SpecialSpeculator  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
历史上的今天:
2022-11-09 内存可用率
2020-11-09 java 常见OPTS参数的含义
点击右上角即可分享
微信分享提示