获取java最耗cpu资源线程信息

n=$1
if [ -z $n  ];
then
    n=1
fi
pid=`jps -lv|grep Server|awk '{print $1}'`
ps H -eo pid,ppid,tid,time,%cpu --sort=%cpu|grep $pid>Thread.txt
jstack  $pid >/wls/wls81/jstack.txt
tid=`tail -n$n Thread.txt |awk {'print $3'}`
cpu=`tail -n$n Thread.txt |awk {'print $5'}`
tid_16=`echo "obase=16;$tid"|bc|tr "[:upper:]" "[:lower:]" `
i=1
for tid_l in $tid_16
do
    echo "tid:$tid_l "
    cpu_l=`echo $cpu|cut -d " " -f $i`
    echo "cpu:$cpu_l"
    task_state=`cat /proc/$pid/task/$tid_l/stat|cut -d " " -f 3`
    echo "task_state:$task_state"                                
    num_threads=`cat /proc/$pid/task/$tid_l/stat|cut -d " " -f 20`
    echo "num_threads:$num_threads"  
    vsize=`cat /proc/$pid/task/$tid_l/stat|cut -d " " -f 23`
    echo "vsize:$vsize" 
    rss=`cat /proc/$pid/task/$tid_l/stat|cut -d " " -f 24`
    echo "rss:$rss" 
    rlim=`cat /proc/$pid/task/$tid_l/stat|cut -d " " -f 25`
    echo "rlim:$rlim" 
    nswap=`cat /proc/$pid/task/$tid_l/stat|cut -d " " -f 36`
    echo "nswap:$nswap" 
    cat jstack.txt|grep 0x$tid_l
    ((i=i+1))

done


posted @ 2013-12-18 15:41  zymaxs  阅读(242)  评论(0)    收藏  举报