(相關(guān)資料圖)
最近懷疑產(chǎn)品遇到了第三方組建的bugGroupdocs轉(zhuǎn)換渲染某些文件時(shí)出現(xiàn)了嚴(yán)重的FullGC的情況而且出現(xiàn)的奇怪的功效學(xué)GCergonomics 的提示因?yàn)椴缓冒l(fā)現(xiàn), 所以同事想通過遇到異常時(shí)自動(dòng)進(jìn)行重啟來暫時(shí)規(guī)避這個(gè)問題. 因?yàn)檫@個(gè)服務(wù)僅是一個(gè)文檔轉(zhuǎn)換和預(yù)覽, 可以不用考慮太多的數(shù)據(jù)一致性等問題所以周末時(shí)間想著幫忙寫一寫
利用jvm的 +XX:printgc 的配置將gc日志打印出來.然后分析GClog, 判斷最近三分鐘,如果有兩次ergonomics的fullGC處理就重啟服務(wù). 如果沒有就繼續(xù)循壞. 每十秒鐘執(zhí)行一次判斷與循環(huán).
第一步. 增加killscirpt和startscript便于關(guān)閉和啟動(dòng)服務(wù). 可以在killscript 之前增加抓取dump或者是jstack的腳本. 啟動(dòng)腳本里面可以增加日志的備份腳本. 第二步. 編寫主腳本.分析gclog日志.循環(huán)判斷full GC產(chǎn)生的日期. 如果是在最近幾分鐘內(nèi)則 數(shù)據(jù) +1 然后判斷大于兩次, 執(zhí)行第一步的腳本. 第三步. 設(shè)置腳本啟動(dòng),循環(huán)判斷.
神通數(shù)據(jù)庫(kù)的李諾帆老師推薦了edge的webtag的GPT插件可以通過這個(gè)插件獲取一些編寫腳本的簡(jiǎn)單處理效果如圖示:
#! /bin/bash#備注: 本腳本的用途是每20秒判斷gclog內(nèi)GC的次數(shù), 如果ergonomics的gc次數(shù)在3分鐘內(nèi)超過2次,那么執(zhí)行重啟操作. #需要嚴(yán)格注意本腳本的使用, 必須修改好腳本的啟動(dòng)腳本, 配置參數(shù), 時(shí)間間隔等. #必須嚴(yán)格進(jìn)行測(cè)試, 不要隨意上生產(chǎn). while truedointerval=20now=`date +%Y%m%d%H%M`timeinfo=`date -d "-3 min" +%s`#timeinfo=`date -d "-10 days" +%s`gclogfile="/myapp/gclog.log"gclogbackup="/myapp/gclog_${now}.log"count=0for num in $(for i in `cat /myapp/gclog.log |grep -i ergonomics |awk "{print $1}" |awk -F + "{print $1}"`; do echo ` date -d ${i} +%s` ; done)do if [ $num -gt $timeinfo ] then ((count++)) fidoneecho "最近周期內(nèi)的ergonomics的GC次數(shù)為: $count"if [ $count -gt 2 ]then scp -rp $gclogfile $gclogbackup echo "" > $gclogfile echo "關(guān)閉服務(wù), 等待五秒鐘重啟,請(qǐng)自行維護(hù)腳本" /deploy/killscript sleep 5 echo "重啟服務(wù),請(qǐng)自行維護(hù)腳本" /deploy/startscript fisleep $intervaldone
編寫腳本為 checkgctime然后chmod +x checkgctime然后 nohup ./checkgctime & 進(jìn)行測(cè)試驗(yàn)證. 注意務(wù)必要進(jìn)行嚴(yán)格測(cè)試, 避免出現(xiàn)安全隱患GPT能夠幫自己使用語(yǔ)法, 但是很多思路還是需要自己串聯(lián)他給出的腳本,大部分都很初級(jí), 可能無法徹底實(shí)現(xiàn)自己的業(yè)務(wù)場(chǎng)景.
關(guān)鍵詞:
質(zhì)檢
推薦