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