linux下查看jvm内存脚本

2017-07-22  本文已影响220人  吴世浩

一:好言

与其违心赔笑,不如一人安静,与其在意别人的背弃和不善,不如经营好自己的尊严和美好。

二、内容

也是这次处理内存溢出问题,所以韵味这边写了脚本进行检测,如果超过多少就dump出相应的文件出来。我找运维要了脚本,记录下,这是我们公司运维写的。

2.1 普通linux下执行代码

#/bin/sh

while :;

do

    pid=`ps -ef | grep -v grep | grep java | grep 8080 | awk '{print $2}'`

    memsize=`jmap -heap $pid | grep "G1 Heap" -A 3| grep used | awk -F= '{print $2}' | awk '{print int($1/1024/1024)}'`

    echo jvm use mem: $memsize
    
    if [[ $memsize -gt 2000 ]];then

        dumpfile="/tmp/8080_`date +'%Y%m%d%H%M%S'`.hprof"

        jmap -dump:format=b,file=$dumpfile $pid && exit 0
        
    fi

    sleep 10

done

    

2.1 docker下执行代码

#/bin/sh

rm -rvf 8080.jvm

while :;

do

    pid=`ps -ef | grep -v grep | grep java | grep 8080 | awk '{print $2}'`

    memsize=`jmap -heap $pid | grep "G1 Heap" -A 3| grep used | awk -F= '{print $2}' | awk '{print int($1/1024/1024)}'`

    echo jvm use mem: $memsize
    
    if [[ $memsize -gt 2800 ]];then

        docker exec -it app-8080-user bash -c "cd /tmp && rm -rvf 8080.jvm && jmap -dump:format=b,file=8080.jvm 31"

        docker cp app-8080-user:/tmp/8080.hprof  /tmp/
    fi

    sleep 10

done

docker下可能不一样,其实我们关注主要的命令就行,比如dump jvm内存信息的命令jmap -heap

上一篇 下一篇

猜你喜欢

热点阅读