日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
服務(wù)被干爆了!竟然是日志的鍋?。?/div>

本文要介紹的是一個(gè)發(fā)生在我們線(xiàn)上環(huán)境的真實(shí)案例,問(wèn)題發(fā)生在某次大促期間,對(duì)我們的線(xiàn)上集群造成了比較大的影響,這篇文章簡(jiǎn)單復(fù)盤(pán)一下這個(gè)問(wèn)題。

成都創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:做網(wǎng)站、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿(mǎn)足客戶(hù)于互聯(lián)網(wǎng)時(shí)代的鐘祥網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

為了方便大家理解,實(shí)際排查和解決過(guò)程可能和本文描述的并不完全一致,但是思路是一樣的。

問(wèn)題過(guò)程

某次大促期間,某一個(gè)線(xiàn)上應(yīng)用突然發(fā)生大量報(bào)警,提示磁盤(pán)占用率過(guò)高,一度達(dá)到了80%多。

這種情況我們第一時(shí)間登錄線(xiàn)上機(jī)器,查看線(xiàn)上機(jī)器的磁盤(pán)使用情況。使用命令:df查看磁盤(pán)占用情況。

 
 
 
 
  1. $df 
  2.  
  3. Filesystem     1K-blocks    Used Available Use% Mounted on 
  4.  
  5. /               62914560 58911440 4003120  93% / 
  6.  
  7. /dev/sda2       62914560 58911440 4003120   93% /home/admin 

發(fā)現(xiàn)機(jī)器磁盤(pán)確實(shí)耗費(fèi)的比較嚴(yán)重,因?yàn)榇蟠倨陂g請(qǐng)求量比較多,于是我們最先開(kāi)始懷疑是不是日志太多了,導(dǎo)致磁盤(pán)耗盡。

這里插播一個(gè)背景,我們的線(xiàn)上機(jī)器是配置了日志的自動(dòng)壓縮和清理的,單個(gè)文件達(dá)到一定的大小,或者機(jī)器內(nèi)容達(dá)到一定的閾值之后,就會(huì)自動(dòng)觸發(fā)。

但是大促當(dāng)天并沒(méi)有觸發(fā)日志的清理,導(dǎo)致機(jī)器磁盤(pán)一度被耗盡。

經(jīng)過(guò)排查,我們發(fā)現(xiàn)是應(yīng)用的某一些Log文件,占用了極大的磁盤(pán)空間,并且還在不斷的增大。

 
 
 
 
  1. du -sm * | sort -nr 
  2.  
  3. 512 service.log.20201105193331 
  4.  
  5. 256 service.log 
  6.  
  7. 428 service.log.20201106151311 
  8.  
  9. 286 service.log.20201107195011 
  10.  
  11. 356 service.log.20201108155838 
 
 
 
 
  1. du -sm * | sort -nr :統(tǒng)計(jì)當(dāng)前目錄下文件大小,并按照大小排序 

于是經(jīng)過(guò)和運(yùn)維同學(xué)溝通,我們決定進(jìn)行緊急處理。

首先采取的手段就是手動(dòng)清理日志文件,運(yùn)維同學(xué)登錄到服務(wù)器上面之后,手動(dòng)的清理了一些不太重要的日志文件。

 
 
 
 
  1. rm service.log.20201105193331 

但是執(zhí)行了清理命令之后,發(fā)現(xiàn)機(jī)器上面的磁盤(pán)使用率并沒(méi)有減少,而且還是在不斷的增加。

 
 
 
 
  1. $df 
  2.  
  3. Filesystem     1K-blocks    Used Available Use% Mounted on 
  4.  
  5. /               62914560 58911440 4003120  93% / 
  6.  
  7. /dev/sda2       62914560 58911440 4003120  93% /home/admin 

于是我們開(kāi)始排查為什么日志被刪除之后,內(nèi)存空間沒(méi)有被釋放,通過(guò)命令,我們查到了是有一個(gè)進(jìn)程還在對(duì)文件進(jìn)行讀取。

 
 
 
 
  1. lsof |grep deleted 
  2.  
  3. SLS   11526  root   3r   REG   253,0 2665433605  104181296 /home/admin/****/service.log.20201205193331 (deleted) 
 
 
 
 
  1. lsof |grep deleted 的作用是:查看所有已打開(kāi)文件并篩選出其中已刪除狀態(tài)的文件 

經(jīng)過(guò)排查,這個(gè)進(jìn)程是一個(gè)SLS進(jìn)程,在不斷的從機(jī)器上讀取日志內(nèi)容。

SLS是阿里的一個(gè)日志服務(wù),提供一站式提供數(shù)據(jù)收集、清洗、分析、可視化和告警功能。簡(jiǎn)單點(diǎn)說(shuō)就是會(huì)把服務(wù)器上面的日志采集到,持久化,然后供查詢(xún)、分析等。

我們線(xiàn)上日志都會(huì)通過(guò)SLS進(jìn)行采集,所以,通過(guò)分析,我們發(fā)現(xiàn)磁盤(pán)空間沒(méi)釋放,和SLS的日志讀取有關(guān)。

到這里,問(wèn)題基本已經(jīng)定位到了,那么我們插播一下原理,介紹一下這背后的背景知識(shí)。

背景知識(shí)

Linux系統(tǒng)中是通過(guò)link的數(shù)量來(lái)控制文件刪除的,只有當(dāng)一個(gè)文件不存在任何link的時(shí)候,這個(gè)文件才會(huì)被刪除。

一般來(lái)說(shuō),每個(gè)文件都有2個(gè)link計(jì)數(shù)器:i_count 和 i_nlink,也就是說(shuō):Linux系統(tǒng)中只有i_nlink及i_count都為0的時(shí)候,這個(gè)文件才會(huì)真正被刪除。

  • i_count表示當(dāng)前文件使用者(或被調(diào)用)的數(shù)量,
  • i_nlink表示介質(zhì)連接的數(shù)量(硬鏈接的數(shù)量);
  • 可以理解為i_count是內(nèi)存引用計(jì)數(shù)器,i_nlink是磁盤(pán)的引用計(jì)數(shù)器。

當(dāng)一個(gè)文件被某一個(gè)進(jìn)程引用時(shí),對(duì)應(yīng)i_count數(shù)就會(huì)增加;當(dāng)創(chuàng)建文件的硬鏈接的時(shí)候,對(duì)應(yīng)i_nlink數(shù)就會(huì)增加。

在Linux或者Unix系統(tǒng)中,通過(guò)rm或者文件管理器刪除文件,只是將它會(huì)從文件系統(tǒng)的目錄結(jié)構(gòu)上解除鏈接(unlink),實(shí)際上就是減少磁盤(pán)引用計(jì)數(shù)i_nlink,但是并不會(huì)減少i_count數(shù)。

如果一個(gè)文件正在被某個(gè)進(jìn)程調(diào)用,用戶(hù)使用rm命令把文件"刪除"了,這時(shí)候通過(guò)ls等文件管理命令就無(wú)法找到這個(gè)文件了,但是并不意味著這個(gè)文件真正的從磁盤(pán)上刪除了。

因?yàn)檫€有一個(gè)進(jìn)程在正常的執(zhí)行,在向文件中讀取或?qū)懭?,也就是說(shuō)文件其實(shí)并沒(méi)有被真正的"刪除",所以磁盤(pán)空間也就會(huì)一直被占用。

而我們的線(xiàn)上問(wèn)題就是這個(gè)原理,因?yàn)橛幸粋€(gè)進(jìn)程正在對(duì)日志文件進(jìn)行操作,所以其實(shí)rm操作并沒(méi)有將文件真正的刪除,所以磁盤(pán)空間并未釋放。

問(wèn)題解決

在了解了線(xiàn)上的問(wèn)題現(xiàn)象以及以上的相關(guān)背景知識(shí)之后,我們就可以想到辦法來(lái)解決這個(gè)問(wèn)題了。

那就是想辦法把SLS進(jìn)程對(duì)這個(gè)日志文件的引用干掉,文件就可以真正的被刪除,磁盤(pán)空間就能真正的被釋放掉了。

 
 
 
 
  1. kill -9 11526 
  2.  
  3. $df 
  4.  
  5. Filesystem     1K-blocks    Used Available Use% Mounted on 
  6.  
  7. /               62914560 50331648 12582912  80% / 
  8.  
  9. /dev/sda2       62914560 50331648 12582912  80% /home/admin 

特別提醒下,在執(zhí)行kill -9 之前,一定要考慮下執(zhí)行的后果是什么,背后原理可以參考:我到服務(wù)器執(zhí)行kill -9后,就被通知第二天別來(lái)了!

事后,我們經(jīng)過(guò)復(fù)盤(pán),發(fā)現(xiàn)之所以出現(xiàn)這樣的問(wèn)題,主要有兩個(gè)原因:

  • 1、線(xiàn)上日志打印太多,太頻繁
  • 2、SLS日志拉取速度太慢

深入分析后我們發(fā)現(xiàn),這個(gè)應(yīng)用打印了很多過(guò)程日志,最初日志打印是為了方便排查線(xiàn)上的問(wèn)題,或者做數(shù)據(jù)分析用的,但是大促期間日志量激增,導(dǎo)致磁盤(pán)空間占用極速上升。

另外,因?yàn)樵搼?yīng)用和幾個(gè)其他的大應(yīng)用共用了一份SLS的project,導(dǎo)致SLS拉取速度被拉低,進(jìn)而導(dǎo)致進(jìn)程一直無(wú)法結(jié)束。

事后,我們也總結(jié)了一些改進(jìn)項(xiàng),對(duì)于第二個(gè)問(wèn)題,我們對(duì)于該應(yīng)用的SLS配置做拆分,獨(dú)立出來(lái)進(jìn)行管理。

對(duì)于第一個(gè)問(wèn)題,那就是大促期間引入日志降級(jí)的策略,一旦發(fā)生磁盤(pán)爆滿(mǎn),就是將日志降級(jí)掉。

關(guān)于日志降級(jí),我開(kāi)發(fā)了一個(gè)通用的工具,就是通過(guò)配置的方式,動(dòng)態(tài)推送日志級(jí)別,動(dòng)態(tài)修改線(xiàn)上的日志輸出級(jí)別。并且把這份配置的修改配置到我們的預(yù)案平臺(tái)上,大促期間進(jìn)行定時(shí)或者緊急預(yù)案處理,即可避免這個(gè)問(wèn)題。

關(guān)于日志降級(jí)工具的開(kāi)發(fā)思路和相關(guān)代碼,下一篇文章中給大家分享。

思考

每次大促之后我們復(fù)盤(pán),都會(huì)發(fā)現(xiàn)其實(shí)大多數(shù)問(wèn)題都是由幾個(gè)不起眼的小問(wèn)題堆積到一起而引發(fā)的。

在問(wèn)題分析過(guò)程中往往會(huì)需要運(yùn)用到很多非開(kāi)發(fā)技能相關(guān)的知識(shí),如操作系統(tǒng)、計(jì)算機(jī)網(wǎng)絡(luò)、數(shù)據(jù)庫(kù)、甚至硬件相關(guān)的知識(shí)。

所以我一直認(rèn)為,判斷一個(gè)程序員是否牛X,就看他的解決問(wèn)題的能力!


分享名稱(chēng):服務(wù)被干爆了!竟然是日志的鍋??!
轉(zhuǎn)載源于:http://www.5511xx.com/article/dhijgoc.html