#!/bin/bash
set -e
read -p "Please import project name:" name
pid=`ps -ef|grep $name|grep -v grep|awk '{print $2}'`
#########################################################
inithisto() {
jmap -histo:live $pid|head -30|tail -29
}
initgcutil() {
jstat -gcutil $pid 1000 5
}
initheap() {
jmap -heap $pid
}
inittop() {
top -Hp $pid
}
initjstack() {
TotalThreads=`jstack $pid | grep "java.lang.Thread.State" | wc -l`
echo -e "Total Threads:\n\033[32;40m [$TotalThreads] \033[0m"
RunnableThreads=`jstack $pid | grep "RUNNABLE" | wc -l`
echo -e "Runnable Threads:\n\033[32;40m [$RunnableThreads] \033[0m"
WaitingThreads=`jstack $pid | grep "WAITING (on object monitor)" | wc -l`
echo -e "WAITING (on object monitor) Threads:\n\033[32;40m [$WaitingThreads] \033[0m"
BlockedThreads=`jstack $pid | grep "BLOCKED" | wc -l`
echo -e "BLOCKED Threads:\n\033[32;40m [$BlockedThreads] \033[0m"
if [ $BlockedThreads -gt 0 ]; then
jstack $pid | grep -A8 "BLOCKED"
fi
}
#########################################################
echo -e "##############################\nproject name:$name pid:$pid\n##############################"
chooseFlag=true
while $chooseFlag ;do
echo A.jmap -histo:live $pid
echo B.jstat -gcutil $pid 1000 5
echo C.jmap -heap $pid
echo D.top -Hp $pid
echo E.jstack $pid statistics
echo Q.exit
#########################################################
read -p "Select the type check:" number
case $number in
A|a)
inithisto
;;
B|b)
initgcutil
;;
C|c)
initheap
;;
D|d)
inittop
;;
E|e)
initjstack
;;
Q|q)
exit
;;
esac
done