日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
線上服務(wù)全掛了,經(jīng)排查居然是Vim的鍋?

最近無(wú)意間打開了曾經(jīng)做后端時(shí)的筆記,想起來(lái)許多往事,挑了一段有意思的,分享給大家。

故事發(fā)生的時(shí)候我還是一個(gè)萌新,啥都不知道,完全聽老板和師兄安排。發(fā)生的時(shí)候是一個(gè)周末,周末嘛,自然就開開心心過(guò)周末,出去玩耍、約會(huì),吃點(diǎn)好吃的,或者找點(diǎn)好玩的。就在正開心的時(shí)候,突然收到一條報(bào)警短信,說(shuō)某某服務(wù)器掛了。

我正擔(dān)心呢,就收到了師兄的消息,他說(shuō)不要緊,我讓隔壁組的同事幫忙查了,應(yīng)該很快就能好。

我聽到師兄這么講也就安心了,沒(méi)想到后來(lái)整個(gè)服務(wù)都宕機(jī)了,完全無(wú)法響應(yīng),因此還出了一個(gè)P1的故障。一般來(lái)說(shuō)這種級(jí)別的故障都有一些很深?yuàn)W的原因,沒(méi)想到后來(lái)開故障分析會(huì)的時(shí)候,才知道這次的事故起因非常非常不起眼,出在了大家日常都會(huì)使用的vim上。

原本第一臺(tái)機(jī)器的宕機(jī)并不稀奇,由于OOM。

當(dāng)時(shí)的服務(wù)器后端是用Java寫的,Java和C++相比最大的區(qū)別就是Java有自動(dòng)垃圾回收機(jī)制,而C++只能手動(dòng)釋放內(nèi)存。

但Java的自動(dòng)垃圾回收機(jī)制也有很多問(wèn)題,比如JVM的配置不合理,或者是代碼寫得不夠優(yōu)雅,創(chuàng)建了許多極耗內(nèi)存的對(duì)象,垃圾回收策略來(lái)不及處理或者是超過(guò)了能夠處理的極限,就會(huì)引起內(nèi)存超界的錯(cuò)誤。英文是OutOfMemory,簡(jiǎn)稱為OOM。

這種現(xiàn)象在Java后端還挺常見的,可能我們當(dāng)時(shí)的系統(tǒng)也的確不夠優(yōu)雅。原本這個(gè)問(wèn)題并不大,因?yàn)榧憾加胸?fù)載均衡策略,一個(gè)服務(wù)都對(duì)應(yīng)多臺(tái)機(jī)器。哪怕是一臺(tái)機(jī)器掛了,上層的網(wǎng)關(guān)做流量分發(fā)的時(shí)候會(huì)自動(dòng)避開宕機(jī)的機(jī)器,一樣能保證請(qǐng)求都能有響應(yīng)。

所以一臺(tái)機(jī)器掛了其實(shí)沒(méi)啥問(wèn)題,我們什么都不做等它自動(dòng)重啟或者是找運(yùn)維幫忙手動(dòng)重啟都行。要命就要命在找了隔壁組的師兄來(lái)排查故障。

這哥們排查故障的時(shí)候,非常自然地連上了服務(wù)器,然后用vim打開了系統(tǒng)的日志。

就是這一行代碼:

 
 
 
  1. vim xxxx.log 

我當(dāng)時(shí)聽到報(bào)告的時(shí)候也很納悶,vim打開日志不是天經(jīng)地義的事情嗎,這也會(huì)出問(wèn)題嗎?

正常來(lái)說(shuō)當(dāng)然是不會(huì),但這里有一個(gè)隱藏的前提條件,就是vim打開文件時(shí)會(huì)把文件加載在系統(tǒng)的內(nèi)存里(顯然)。既然是加載在內(nèi)存里,那么自然是會(huì)消耗內(nèi)存的。這就導(dǎo)致了一個(gè)問(wèn)題,如果這個(gè)文件太大,然后又用了vim強(qiáng)行打開,很有可能會(huì)導(dǎo)致系統(tǒng)內(nèi)存耗盡于是崩潰。

這個(gè)哥們那天正是遇到了這樣的事情,他發(fā)現(xiàn)vim打開之后ssh連接斷了。他以為是自己的網(wǎng)絡(luò)出了問(wèn)題,于是他換了一臺(tái)機(jī)器連接查看日志,于是同樣的劇本再次上演。這哥們一口氣把所有的服務(wù)器都查看了一遍,發(fā)現(xiàn)都沒(méi)反應(yīng),他以為是自己的ssh跪了,就匯報(bào)說(shuō)暫時(shí)看不了問(wèn)題,因?yàn)閟sh跪了。

報(bào)告的人也沒(méi)當(dāng)回事,因?yàn)橹暗膱?bào)警只是掛了一臺(tái)機(jī)器,不會(huì)影響服務(wù),也就沒(méi)當(dāng)回事。你可能會(huì)好奇,后面的機(jī)器掛了難道沒(méi)報(bào)警嗎?說(shuō)來(lái)慚愧,關(guān)于這里的細(xì)節(jié)我有些記不清了。

我猜想了一下,無(wú)非兩種可能,一種是報(bào)警程序是運(yùn)行在機(jī)器里檢測(cè)java進(jìn)程的,java進(jìn)程掛了能夠發(fā)現(xiàn)并報(bào)警,但如果是機(jī)器直接掛了,就沒(méi)法報(bào)警了。第二種可能是報(bào)警了,但是他們以為還是之前的問(wèn)題,于是忽略了。

當(dāng)時(shí)這個(gè)故事給我觸動(dòng)很大,這也是我至今還能記住這個(gè)故事的原因。因?yàn)槲覜](méi)有想到,只是使用vim打開一個(gè)文件居然還有這樣的風(fēng)險(xiǎn)。

那么問(wèn)題來(lái)了,既然vim打開文件有這樣的隱患,我們應(yīng)該怎么辦呢?

大概有兩種方法,第一種是事先檢查。在使用vim打開文件之前,先使用ls命令查看一下文件的大小,如果文件過(guò)大則不要直接打開。

檢查的命令很簡(jiǎn)單:ls -lh,ls命令很簡(jiǎn)單,大家都知道查看目錄下文件。這里傳入了兩個(gè)參數(shù),l表示詳細(xì)信息,包括文件類型、權(quán)限、文件大小等。但是這里顯示的文件大小是字節(jié)數(shù),很難直接看出來(lái)有多大,所以我們需要加上一個(gè)參數(shù)h,我沒(méi)記錯(cuò)的話,這個(gè)參數(shù)表示將文件大小轉(zhuǎn)化成人類可識(shí)別的形式。

比如我們不加h,得到的結(jié)果是這樣的:

加上h之后,則是這樣的:

這里的文件大小就容易理解多了。

第二種方式是使用tail代替vim查看log,tail的意思是查看文件尾部的內(nèi)容。它有兩個(gè)參數(shù)非常常用,一個(gè)是-n,也就是顯示最后n行。

 
 
 
  1. tail -n10 xxx.log 

我這里寫的就是顯示xxx.log文件的最后10行,這里的n也可以省略,寫成tail -10也行。

第二個(gè)參數(shù)是-f,-f的意思是表示循環(huán)輸出。因?yàn)榫€上的日志往往是不斷變更的,因?yàn)闀?huì)有系統(tǒng)一直往當(dāng)中寫入新的日志。我們使用-f,就可以保持同步,將源源不斷寫入的內(nèi)容都打印在屏幕上。

并且-f可以和-n一起使用,表示從當(dāng)前末尾n行開始一直循環(huán)輸出。

 
 
 
  1. tail -30f xxx.log 

自從學(xué)會(huì)了這兩招,再也沒(méi)有因?yàn)槭褂胿im打開巨大日志而導(dǎo)致系統(tǒng)崩潰過(guò)。

本文轉(zhuǎn)載自微信公眾號(hào)「Coder梁」,作者梁唐。轉(zhuǎn)載本文請(qǐng)聯(lián)系Coder梁公眾號(hào)。


名稱欄目:線上服務(wù)全掛了,經(jīng)排查居然是Vim的鍋?
網(wǎng)頁(yè)URL:http://www.dlmjj.cn/article/cdhsscg.html