一:好言
与其违心赔笑,不如一人安静,与其在意别人的背弃和不善,不如经营好自己的尊严和美好。
二、内容
也是这次处理内存溢出问题,所以韵味这边写了脚本进行检测,如果超过多少就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