生产环境部署springcloud微服务启动慢的问题排查
今天帶來(lái)一個(gè)真實(shí)案例,雖然不是什么故障,但是希望對(duì)大家有所幫助。
一、問(wèn)題現(xiàn)象:
生產(chǎn)環(huán)境部署springcloud應(yīng)用,服務(wù)部署之后,有時(shí)候需要10幾分鐘才能啟動(dòng)成功,在開(kāi)發(fā)測(cè)試環(huán)境則沒(méi)有這個(gè)問(wèn)題。最開(kāi)始是所有微服務(wù)都有這種情況,隨著項(xiàng)目周期的進(jìn)行,zwfw微服務(wù)的問(wèn)題最為突出,每次部署后,需要大概6分鐘才能啟動(dòng),在這6分鐘期間,程序沒(méi)有任何日志,控制臺(tái)沒(méi)有任何輸出。每次部署都會(huì)觸發(fā)服務(wù)不可用的報(bào)警。如下:
注:報(bào)警是連續(xù)2分鐘不可用才開(kāi)始發(fā)送。
二、問(wèn)題分析過(guò)程
起初懷疑是公司使用的加解密工具Virbox Protector導(dǎo)致的,公司加密程序Virbox Protector畢竟對(duì)線上的java可執(zhí)行程序和待發(fā)布的jar包都進(jìn)行了修改,并且在程序啟動(dòng)前,java首先要對(duì)jar包進(jìn)行解密,勢(shì)必會(huì)造成程序的性能造成影響。但是加密組本著“其他組都沒(méi)有反饋這個(gè)問(wèn)題,就你們組有問(wèn)題”的態(tài)度,直接將問(wèn)題踢了回來(lái),導(dǎo)致問(wèn)題久久不能認(rèn)真對(duì)待。
2021年9月9日研發(fā)人員反饋另外一個(gè)微服務(wù),也出現(xiàn)了這種啟動(dòng)慢或者無(wú)法啟動(dòng)的問(wèn)題,問(wèn)題被再次提出。這次,我決定再重新觀察一下這個(gè)問(wèn)題,最起碼要找出是加密工具惹禍的證據(jù)。
因?yàn)閦wfw這個(gè)服務(wù)能穩(wěn)定復(fù)現(xiàn),所以就拿這個(gè)服務(wù)進(jìn)行分析。
2.1 zwfw這個(gè)微服務(wù)
首先介紹一下zwfw這個(gè)服務(wù)的背景,這個(gè)服務(wù)部署在華為云主機(jī)上,不具備訪問(wèn)互聯(lián)網(wǎng)的網(wǎng)絡(luò)權(quán)限。
2.2 jstack工具介紹
如果你想知道,當(dāng)前時(shí)間,java都在執(zhí)行哪些任務(wù),那么就可以使用jstack來(lái)觀察。jstack,jmap,jstats都是java生態(tài)中非常重要的工具,并且是jvm自帶的命令。使用jstack 進(jìn)程號(hào),就能列出這個(gè)java進(jìn)程所有的線程,及線程正在執(zhí)行的方法棧,默認(rèn)是將線程棧打印在當(dāng)前控制臺(tái)。jstack還可以和操作系統(tǒng)命令top聯(lián)合使用排查CPU占用高的問(wèn)題。
2.3 排查過(guò)程
分析問(wèn)題之前,首先將這個(gè)服務(wù)從nacos上面踢下來(lái),防止在調(diào)試期間被前端機(jī)器調(diào)用(因?yàn)槭侵苯釉谏a(chǎn)環(huán)境調(diào)試)。
然后將zwfw的進(jìn)程kill掉,再手工使用命令啟動(dòng)服務(wù)。打出執(zhí)行命令后,日志文件中的日志開(kāi)始中斷。
然后執(zhí)行jstack 進(jìn)程號(hào),打印出來(lái)堆棧,結(jié)果真是出乎意料,其中主線程的方法棧如下:
比較奇怪,還真是阻塞在項(xiàng)目代碼上面。這個(gè)問(wèn)題,之前也有人遇到過(guò),如:https://www.javacodegeeks.com/2015/03/inetaddressimpllookupallhostaddr-slowhangs.html
因?yàn)橹白鲰?xiàng)目,碰到過(guò)多次沒(méi)有配置hostname導(dǎo)致的dns超時(shí)的問(wèn)題(比如說(shuō)hession調(diào)用),所以根據(jù)我的經(jīng)驗(yàn),這個(gè)只需要修改一下host文件就能解決。
所以就對(duì)本機(jī)的hostname增加ip的解析。因?yàn)榕聭?yīng)用依賴hostname對(duì)應(yīng)的IP,所以hostname對(duì)應(yīng)的ip,要配置成局域網(wǎng)的真實(shí)ip。修改host配置后,問(wèn)題解決,zwfw啟動(dòng)縮短為正常的10秒以內(nèi)。
三、解決方法
既然是因?yàn)榻馕鰄ostname導(dǎo)致,那最快的解決方法就是增加hostname的解析。也不知道log4j2,為什么必須要這樣做。
1、首先查看本機(jī)的hostname,輸入hostname命令。
2、查看本機(jī)的ip和ipv6地址,使用ifconfig命令。
3、編輯/etc/hosts文件,增加hostname的解析,問(wèn)題解決
四、問(wèn)題回顧和總結(jié)
團(tuán)隊(duì)之間互相踢皮球不配合導(dǎo)致這個(gè)問(wèn)題持續(xù)的時(shí)間比較長(zhǎng)。我一開(kāi)始一直認(rèn)為是公司對(duì)java程序進(jìn)行了修改導(dǎo)致的,導(dǎo)致沒(méi)有嘗試排查問(wèn)題,所以,以后遇到問(wèn)題,不要輕易懷疑很成熟的基礎(chǔ)組件。
?其實(shí)很多生產(chǎn)環(huán)境的故障,我們都可以避免。下面是我在互聯(lián)網(wǎng)系統(tǒng)中總結(jié)的一些其他案例,如需自取
?做支付遇到httpclient的大坑
?記一次自動(dòng)恢復(fù)的故障
總結(jié)
以上是生活随笔為你收集整理的生产环境部署springcloud微服务启动慢的问题排查的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Redis 数据丢失问题排查
- 下一篇: Taylor Swift - Encha