SpringCloud服務(wù)啟動夯住解決方法

2020年4月14日17:25:33 發(fā)表評論 4,497 ℃

項目已經(jīng)上線一段時間,最近有個新需求,新增加了一個服務(wù)。當(dāng)天上線的時候,發(fā)現(xiàn)這個服務(wù)在生產(chǎn)環(huán)境服務(wù)器怎么也啟動不了,總是卡在下圖的界面:

SpringCloud服務(wù)啟動夯住解決方法

然后在測試環(huán)境,反反復(fù)復(fù)發(fā)布了兩周多,也沒出現(xiàn)這個問題。沒辦法經(jīng)過1個多小時的排除,未找到原因,只好把這個服務(wù)推遲上線。

后面經(jīng)過反復(fù)測試,發(fā)現(xiàn)在預(yù)生產(chǎn)環(huán)境也無法啟動,測試環(huán)境偶爾也會出現(xiàn)這個情況,到目前為止找不到方向,想著debug模式啟動看下是否有異常信息,這個時候卻正常啟動了。

然后把日志改回info反復(fù)測試,又可以啟動了,越來越詭異,百思不得其解。于是把服務(wù)停了,第二天發(fā)現(xiàn)又無法啟動了...此時內(nèi)心是崩潰的。

最后突然才想起,可以使用java的堆棧分析命令jstack,打印堆棧信息,就知道什么原因?qū)е聠雍蛔×恕?/span>

導(dǎo)出日志分析才發(fā)現(xiàn)大部分線程都是Blocked(阻塞)狀態(tài),而這些阻塞的原因都與RocketMQ相關(guān),日志中還有線程Deadlock(死鎖)狀態(tài),相關(guān)堆棧信息也是和RocketMQ相關(guān),然后讓開發(fā)人員去排查,發(fā)現(xiàn)是RocketMQ消費(fèi)方面的代碼;最后經(jīng)過分析原因是:因為這個服務(wù)是新上線的,然而服務(wù)在啟動的過程中,MQ就已經(jīng)啟動了,并且要去消費(fèi)消息,而此時服務(wù)還未完全啟動,第一次發(fā)布此服務(wù)會有大量的消息需要消費(fèi),導(dǎo)致線程阻塞并且死鎖。

解決辦法

1、調(diào)整服務(wù)啟動時RocketMQ的啟動順序,貌似不好實現(xiàn)。

2、改成debug模式啟動成功以后,消費(fèi)了以前的消息,再改回來重新發(fā)布。(至于為什么debug模式就不會夯住,目前還沒找到原因)

【騰訊云】云服務(wù)器、云數(shù)據(jù)庫、COS、CDN、短信等云產(chǎn)品特惠熱賣中

發(fā)表評論

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: