一:好言
與其違心賠笑卢鹦,不如一人安靜,與其在意別人的背棄和不善拂到,不如經(jīng)營(yíng)好自己的尊嚴(yán)和美好痪署。
二、內(nèi)容
也是這次處理內(nèi)存溢出問(wèn)題兄旬,所以韻味這邊寫(xiě)了腳本進(jìn)行檢測(cè)狼犯,如果超過(guò)多少就dump出相應(yīng)的文件出來(lái)。我找運(yùn)維要了腳本领铐,記錄下悯森,這是我們公司運(yùn)維寫(xiě)的。
2.1 普通linux下執(zhí)行代碼
#/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下執(zhí)行代碼
#/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下可能不一樣绪撵,其實(shí)我們關(guān)注主要的命令就行瓢姻,比如dump jvm內(nèi)存信息的命令jmap -heap