記一次cpu負(fù)載高的問(wèn)題定位

背景

生產(chǎn)服務(wù)出現(xiàn)請(qǐng)求慢,接口超時(shí),服務(wù)器cpu占用高,需要排查定位問(wèn)題。

初步定位

1、根據(jù)反饋,初步定位為cpu占用高導(dǎo)致接口響應(yīng)變慢,接下來(lái)需要定位cpu負(fù)載高的原因。
2、使用top命令可以看到j(luò)ava進(jìn)程cpu占用過(guò)高;
3、接下來(lái)使用 top -Hp pid 查詢進(jìn)程內(nèi)高的線程pid,發(fā)現(xiàn)有四個(gè)線程cpu占用在80%;

排查線程

1、使用printf "x \n" pid依次轉(zhuǎn)換線程id為十六進(jìn)制;
2、使用jstack pid |grep tid -A 30 依次查看cpu占用高的線程信息,發(fā)現(xiàn)皆為gc 線程判定為頻繁fullgc或gc時(shí)間過(guò)長(zhǎng);

排查內(nèi)存

1、輸出gc信息使用jstat -gcutil pid 10000 10 ,得知一次完整的gc需要365秒,判斷是有大對(duì)象需要回收;
2、接下里就是定位哪里的引用對(duì)象過(guò)多的問(wèn)題,結(jié)合jmap -dump:format=b,file=heap.bin <pid> 堆??煺?與 jhat -J-Xmx512m heap.bin 在localhost:7000 中查詢引用,發(fā)現(xiàn)大對(duì)象為原始訂單;
3、根據(jù)日志和相關(guān)業(yè)務(wù)人員討論、代碼定位,是因?yàn)樵加唵伪頂?shù)量激增,相關(guān)查詢sql未能及時(shí)優(yōu)化,查詢到的大對(duì)象無(wú)法及時(shí)回收;

結(jié)論

原始訂單表數(shù)據(jù)增長(zhǎng)大于預(yù)期,相關(guān)sql未能及時(shí)優(yōu)化,大對(duì)象回收時(shí)間長(zhǎng),導(dǎo)致cpu占用高。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容