spark運(yùn)行正常,某一個(gè)Stage卡住,停止不前異常分析
異常說(shuō)明
spark提交任務(wù)后,前N個(gè)Stage運(yùn)行順利,到達(dá)某一個(gè)Stage后,卡住,通過(guò)spark界面可以看到,executor運(yùn)行正常,卡住的Stage的task已經(jīng)分配至executor,但duration time一直增加,task卻不結(jié)束,同時(shí)log中也無(wú)異常報(bào)出。
解決方案:
1、分析沒(méi)有異常說(shuō)明程序本身沒(méi)有問(wèn)題,框架運(yùn)行也運(yùn)行正常,很有可能是因?yàn)樵搒tage操作較為復(fù)雜,將CPU打滿(mǎn)。
2、通過(guò)spark監(jiān)控界面找到task被分配到的機(jī)器,并登陸,通過(guò)jps -ml 打印出具體的java進(jìn)程和main class信息(具體java命令行工具見(jiàn)java下文檔)
3、得到pid之后,使用top -p 觀(guān)察該process,發(fā)現(xiàn)確實(shí)CPU占用非常高,說(shuō)明某項(xiàng)操作將CPU占滿(mǎn),此時(shí)task并未失敗,而是一直在進(jìn)行
4、通過(guò)top -Hp {pid}將該進(jìn)程內(nèi)部線(xiàn)程信息打印,獲得哪條線(xiàn)程占用CPU高
5、通過(guò)jstack {pid} 將進(jìn)程堆棧打印,并將上一輪操作中獲取的線(xiàn)程號(hào)在jstack文件中查詢(xún),定位線(xiàn)程(獲取的線(xiàn)程號(hào)為十進(jìn)制,需將獲取的線(xiàn)程id轉(zhuǎn)換為十六進(jìn)制,再進(jìn)行對(duì)照)








暫無(wú)數(shù)據(jù)