jmap使用

jmap -heap pid 查看java进程的堆情况

jmap -histo pid显示堆中对象的统计信息

jmap -histo:live pid显示堆中存活对象的统计信息

jmap -dump:format=b,file=dump.hprof  pid生成堆中对象的快照(含堆栈信息)

jmap -dump:live,format=b,file=dump.hprof pid 生成堆中存活对象的快照(不含堆栈信息)

-F 当-dump 没有响应时,强制生成 dump 快照

 

Java线程转储及线程信息

保存如下脚本为cpu_high.sh, 然后执行sh cpu_high.sh 111 2 1

#!/bin/bash
#$#:表示执行脚本传入参数的个数
#${1:-3}表示第一参数,默认值3
if [ $# -ne 3 ]; then
    echo "    输出java程序中线程及线程转储"
    echo "Usage: cpu_high.sh pid  count  delay"
    echo "    pid=java进程id count=采样次数, delay=采样后休眠秒数"
    exit 1
fi

pid=${1}
count=${2}
delay=${3}
now=`date +"%Y%m%d%H%M%S"`

i=1
while [ $i -le $count ]
do
    jstack $pid >jstack.$pid.$now.$i.log
    top -b -n1 -Hp $pid > threads.$pid.$now.$i.log
    if [ $i -lt $count ]; then
        sleep $delay
    fi
    let i++
    echo -n "."
done

echo -e "\n"

 

Java堆dump

将如下脚本保存为heapdump.sh, 然后执行sh heapdump.sh 111 1 2

#!/bin/bash
#$#:表示执行脚本传入参数的个数
#${1:-3}表示第一参数,默认值3
if [ $# -ne 3 ]; then
    echo "    dump JAVA进程的堆"
    echo "Usage: heapdump.sh  pid count delay"
    echo "  pid = java进程id  count = 采样次数, delay = 采样后休眠秒数"
    exit 1
fi

pid=${1}
count=${2}
delay=${3}
now=`date +"%Y%m%d%H%M%S"`

i=1
while [ $i -le $count ]
do
    #生成堆中对象的快照(含堆栈信息)
    jmap -dump:format=b,file=heapdump.$pid.$now.$i.hprof  $pid 
    if [ $i -lt $count ]; then
        sleep $delay
    fi
    let i++
    echo -n "."
done

echo -e "\n"

Java堆对象统计

将如下脚本保存为heap_obj_sum.sh, 然后执行sh heap_obj_sum.sh 111 1 1

#!/bin/bash
#$#:表示执行脚本传入参数的个数
#${1:-3}表示第一参数,默认值3
if [ $# -ne 3 ]; then
    echo "    显示Java程序堆中对象的统计信息"
    echo "Usage: heap_obj_sum.sh pid count delay"
    echo "  pid=Java程序进程id  count = 表示采样次数, delay = 表示采样后休眠秒数"
    exit 1
fi

pid=${1}
count=${2}
delay=${3}
now=`date +"%Y%m%d%H%M%S"`

i=1
while [ $i -le $count ]
do
    #生成堆中对象的快照(含堆栈信息)
    jmap -histo $pid > heap_obj_sum.$pid.$now.$i.log
    if [ $i -lt $count ]; then
        sleep $delay
    fi
    let i++
    echo -n "."
done

echo -e "\n"

 

posted on 2022-05-24 14:11  jmbkeyes  阅读(318)  评论(0)    收藏  举报

导航