一. 問(wèn)題描述
我們?nèi)ッ嬖嚂r(shí),有些面試官會(huì)經(jīng)常問(wèn)我們:你都遇到過(guò)哪些線上的故障?是解決這些線上故障的?今天千鋒就給大家講解一個(gè)比較奇葩的線上故障,問(wèn)題如下所示:
線上集群中,某一臺(tái)服務(wù)器頻繁重啟是怎么回事?如何解決?
下面是千鋒的線上服務(wù)器架構(gòu)圖:
二. 問(wèn)題排查
為什么會(huì)出現(xiàn)線上某臺(tái)服務(wù)器頻繁重啟呢?為了搞清楚問(wèn)題所在,我們可以按照如下思路來(lái)進(jìn)行問(wèn)題排查。
首先我給大家說(shuō)明一下,千鋒的線上服務(wù)器,請(qǐng)求負(fù)載均衡策略是采用的是輪詢(xún)機(jī)制,請(qǐng)求數(shù)量平均分配。
接下來(lái)我們可以定位一下故障發(fā)生的時(shí)間點(diǎn)。在本案例中,我的線上服務(wù)器重啟的時(shí)間段基本是固定的,所以我就可以在那個(gè)特定的時(shí)間段內(nèi)進(jìn)行監(jiān)控。
然后我們?cè)賮?lái)分析一下,服務(wù)器重啟可能有哪些常見(jiàn)的原因:
硬件風(fēng)扇散熱不好,造成服務(wù)器過(guò)熱,服務(wù)器會(huì)重啟---->我的服務(wù)器風(fēng)扇沒(méi)有問(wèn)題,排除掉;
檢查內(nèi)存空間是否充足。可以在那個(gè)時(shí)間段通過(guò)top命令監(jiān)控CPU和內(nèi)存的利用率,看看是否在那個(gè)時(shí)間段內(nèi)硬件資源消耗殆盡了;
軟件原因。服務(wù)器內(nèi)部是否有什么任務(wù)代碼,在那個(gè)時(shí)間段會(huì)將硬件資源耗盡,造成重啟。
通過(guò)以上排查方法,我既沒(méi)有發(fā)現(xiàn)風(fēng)扇有問(wèn)題,也沒(méi)有發(fā)現(xiàn)在服務(wù)器中除了當(dāng)前自己的應(yīng)用外,還有其他大型應(yīng)用在占用硬件資源。但通過(guò)top命令,我卻在服務(wù)器經(jīng)常重啟的時(shí)間段內(nèi),發(fā)現(xiàn)硬件CPU和內(nèi)存資源在某一個(gè)時(shí)間段內(nèi)提升地特別快,進(jìn)而造成硬件資源耗盡,服務(wù)器重啟。
那么如果在沒(méi)有外部軟件占用資源的情況下,CPU和內(nèi)存資源的消耗更多地是由自己的軟件耗盡的。所以現(xiàn)在我們可以初步診斷出,是當(dāng)前自己的應(yīng)用在處理請(qǐng)求能力上較差,造成大量請(qǐng)求累積。
為了驗(yàn)證結(jié)論是否正確,千鋒使用了jmeter壓力測(cè)試工具,對(duì)集群中幾臺(tái)沒(méi)有問(wèn)題的服務(wù)器和當(dāng)前服務(wù)器進(jìn)行測(cè)試對(duì)比,結(jié)果發(fā)現(xiàn)當(dāng)前出現(xiàn)問(wèn)題的服務(wù)器在處理請(qǐng)求能力上與其他服務(wù)器相比速度較慢。
最終,千鋒通過(guò)以上經(jīng)驗(yàn)推測(cè)和測(cè)試方法得出結(jié)果,之所以會(huì)出現(xiàn)線上服務(wù)器經(jīng)常重啟,此處主要是因?yàn)槟撑_(tái)服務(wù)器硬件性能較差,在輪詢(xún)策略分配請(qǐng)求時(shí),平均分配造成當(dāng)前機(jī)器請(qǐng)求的積壓過(guò)多,承載不了,從而產(chǎn)生系統(tǒng)重啟。
三. 解決方案
針對(duì)這個(gè)問(wèn)題,解決方案如下:
修改分布式請(qǐng)求策略。雖然輪詢(xún)策略平均分配了請(qǐng)求數(shù),但由于不同配置的機(jī)器對(duì)相同請(qǐng)求的處理能力不同,有可能會(huì)出現(xiàn)個(gè)別服務(wù)器無(wú)法承載過(guò)多壓力而崩潰的情況;
給請(qǐng)求的機(jī)器地址添加權(quán)重。我們也可以給出現(xiàn)問(wèn)題的機(jī)器分配較少的權(quán)重,在請(qǐng)求分配時(shí),給配置較低的服務(wù)器少分配一些權(quán)重,避免造成請(qǐng)求積壓。
現(xiàn)在你知道如何排查線上服務(wù)器的類(lèi)似故障了嗎?如果你還有其他問(wèn)題,可以在評(píng)論區(qū)留言哦。關(guān)注Java架構(gòu)棧,干貨天天都不斷哦。