又是一個百無聊賴的早晨,我在快樂地摸魚,工作群響了:離線系統(tǒng)登錄不上了。我第一反應(yīng)是不科學(xué)啊,系統(tǒng)已經(jīng)很久改動過了...趕緊上生產(chǎn)環(huán)境看看,CPU高達1200%。接著又是熟練地敲出那幾行排查CPU過高的命令
top-H-ppid查看java占用率最高的幾條線程 jstackpid>xxx.txt打印線程快照 jmap-heappid查看堆內(nèi)存情況



看這玩意啥都看不出來,感覺是系統(tǒng)對象沒有釋放,在瘋狂GC,但是因為FULL GC的時候已經(jīng)STW了,所以無法查看到底是哪個線程出了問題。然后過了10分鐘系統(tǒng)突然又好了....堵塞的操作已經(jīng)完成,gc能正常回收了。
然后過了兩分鐘又卡死了,我先重啟了系統(tǒng),后面再分析分析。
等系統(tǒng)沒什么人用的時候,我再試著重現(xiàn)一下問題,打開系統(tǒng)一頓亂點,結(jié)果是點開某個功能的詳情時系統(tǒng)卡住了,CPU又飚上去了,喜聞樂見~問題定位到了,再實錘一下之前是不是這個問題,我看了一下localhost_access_log日志發(fā)現(xiàn),確實是這個接口卡了一千多秒。
nginx日志
因為離線沒什么人使用,所以問題過了很久再暴露出來。看了一下代碼,主要是同事業(yè)務(wù)邏輯問題,有個參數(shù)沒傳進去,導(dǎo)致 sql 走了全表掃描,數(shù)據(jù)很多,要查很久,查到了幾百萬的數(shù)據(jù),gc 也無法回收。
還好內(nèi)存夠大,要不然早就 OOM 了。
復(fù)盤
一開始我以為是某個接口調(diào)了很多次并發(fā)太高導(dǎo)致的,沒想到點一下詳情系統(tǒng)就掛了。。我們可以看到CPU在GC回收的時候STW,是沒有線程能占用到CPU的,所以top -H -p pid 只能看到CPU全被GC線程占用了。如果是某個接口并發(fā)太高導(dǎo)致的,我們可以看jstack線程快照,里面是會有這個接口在執(zhí)行的記錄。
還有一個問題就是說系統(tǒng)GC卡了10-20分鐘,卻沒有報OOM,還是一直在堵塞狀態(tài),后面還正常了一小會,這個是需要看堆內(nèi)存的情況...
因為比較難排查所以只是通過現(xiàn)象知道GC還是可以回收一點點垃圾的
總結(jié)
1、CPU100%的時候可以打印線程快照jstack pid,查看是哪個線程占用了CPU,一般都是某個業(yè)務(wù)線程阻塞無法進行GC回收導(dǎo)致。
2、可以查看localhost_access_log查看系統(tǒng)接口用時,一般用時很久的都是有問題的接口。
3、同事的業(yè)務(wù)代碼參數(shù)沒有傳,導(dǎo)致全表掃描直接卡死系統(tǒng)。
審核編輯:湯梓紅
-
cpu
+關(guān)注
關(guān)注
68文章
11048瀏覽量
216119 -
內(nèi)存
+關(guān)注
關(guān)注
8文章
3111瀏覽量
75025 -
命令
+關(guān)注
關(guān)注
5文章
730瀏覽量
22706 -
代碼
+關(guān)注
關(guān)注
30文章
4891瀏覽量
70306 -
nginx
+關(guān)注
關(guān)注
0文章
164瀏覽量
12509
原文標題:點一下詳情系統(tǒng)掛了,CPU 100%
文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
請問為什么am3354 刷新lcd時cpu占用率很高?
Linux的CPU和內(nèi)存占用率查看
基于IMX6查看Linux下的CPU和內(nèi)存的占用率
STM32F407的中斷CPU占用率怎么計算?
rtthread有每個線程的CPU占用率統(tǒng)計嗎?
CPU占用率100%的故障解決
服務(wù)器CPU占用率高的定位分析
Chromebook安裝更新Chrome OS或?qū)?b class='flag-5'>導(dǎo)致CPU占用率達到100%和發(fā)熱問題

stm32運用freertos庫函數(shù)測試各個線程任務(wù)信息和cpu占用率

評論