阿里云ECS的CPU100%排查,阿里云ecs性能-ESG跨境

阿里云ECS的CPU100%排查,阿里云ecs性能

來源網(wǎng)絡
來源網(wǎng)絡
2022-05-08
點贊icon 0
查看icon 792

阿里云ECS的CPU100%排查,阿里云ecs性能阿里云ECS的CPU100%排查一、背景和現(xiàn)象初創(chuàng)公司,架構lanmp,web前端和后端分開服務器,業(yè)務驅動主要是nginx和apache,nginx主要是處理靜態(tài)文件和反向代理,前后端、搜索引擎、緩存、隊列等附加的服務都是用docker容器部署。因為比較初級,上傳文件......

阿里云ECS的CPU100%排查,阿里云ecs性能




阿里云ECS的CPU100%排查

一、背景和現(xiàn)象

初創(chuàng)公司,架構lanmp,web前端和后端分開服務器,業(yè)務驅動主要是nginx和apache,nginx主要是處理靜態(tài)文件和反向代理,前后端、搜索引擎、緩存、隊列等附加的服務都是用docker容器部署。因為比較初級,上傳文件和采集文件都是直接寫在硬盤上,涉及到的目錄共享,就在其中一臺服務器存儲并且nfs共享。我們暫且分為ECS1(apache1)、ECS2(apache2)、ECS3(nginx)。某天網(wǎng)站業(yè)務中斷,但是沒有報錯。一直在等待響應,默認響應超時是一分鐘,所以很基礎高可用沒有起到作用。中斷10分鐘左右,重啟服務,提示“open too many files”,但是lsof統(tǒng)計沒幾個。因為初級處理不了,所以直接重啟服務器,一段時間后一切恢復正常,可是第二天又來一次這種情況。

二、第一次出現(xiàn)后的排查思路

本來第一次發(fā)現(xiàn)這種問題的時候就要追查原因了,看了一下zabbix監(jiān)控圖像其中斷了十分鐘,包括網(wǎng)絡、內存、CPU、硬盤、IO等監(jiān)控數(shù)據(jù)。首先想到的是網(wǎng)絡問題,結論是zabbixservert獲取不到了zabbixagent采集的數(shù)據(jù),估計就是網(wǎng)絡不通了。

但是,這個結論站不住腳,因為我本身通過ssh登錄服務器,并且命令輸入無卡頓,不至于頭文件都傳不過來。后來一看阿里云的云監(jiān)控,上面有數(shù)據(jù),似乎也可以佐證網(wǎng)絡這個說法,因為云監(jiān)控是阿里云內部的監(jiān)控,可以內網(wǎng)獲取到監(jiān)控數(shù)據(jù)。直到看CPU的使用率這項,發(fā)現(xiàn)有一段時間的CPU使用率100%。并且我重啟的時候CPU恢復正常,不能說網(wǎng)絡一定沒問題,但系統(tǒng)肯定有問題。也可以解釋因為CPU使用已經(jīng)是100%,zabbixagent和根本不能正常運行,所以沒有監(jiān)控數(shù)據(jù)。因為這個公司全部都是云服務器,沒有使用IDC所以我們也沒有安裝smokeping來監(jiān)控,接著我們就不把重心在網(wǎng)絡上了。

目前掌握的信息就是:在毫無征兆的情況下,CPU暴漲到100%,重啟之前一直保留,重啟之后恢復原樣。匆忙之中又看了一下系統(tǒng)各日志,因為太匆忙,沒有總結,沒有找到什么有價值的東西?,F(xiàn)在有下面幾種猜想:第一,程序的bug或者部署不當,觸發(fā)之后耗盡資源。第二、docker容器的bug。第三、網(wǎng)絡攻擊。第四、病毒入侵。第五、阿里云方系統(tǒng)不穩(wěn)定。

小總結了一下,現(xiàn)在問題還沒有找出來。下次還有這個問題的可能,所以先盡量防范,但是又不能重啟一刀切。所以在zabbix上面設置了自動化,當檢測到ECS1獲取不到數(shù)據(jù)的時候馬上操作ECS3標記后端為ECS1的apache為down。保留異?,F(xiàn)場。(請求停止的時候,CPU100%還在)

三、現(xiàn)場排查

1、相應的排查計劃(想到這些信息需要獲取的,實際上沒有嚴格按照這樣的步驟)

1)用htop和top命令監(jiān)控CPU、內存使用大的進程。先看看哪個進程消耗資源較多,用戶態(tài)、內核態(tài)、內存、IO……同時sarb查io的歷史定時抽樣。

2)統(tǒng)計tcp連接數(shù),看看有沒有DDOS攻擊。netstatanpgrep tcpwcl。用iftopi eth1看看通訊。同時用tailn 1200/var/log/messages查看內核日志。

3)用pstree查看打開進程,ps auxwcl看看有沒有特別多的進程。雖然zabbix監(jiān)控上說沒有,但是我們要檢查一下看看有沒有異常的進程名字。

4)查看全部容器的資源使用docker stats$(docker psaq),看看能不能從容器上排查。

5)有了“too many open files”的啟發(fā),計算打開文件數(shù)目lsofwcl,根據(jù)進程看看ll/proc/PID/fd文件描述符有沒有可疑的打開文件、文件描述符。

6)關于用lsof打開文件數(shù)找到的線索,排序打開文件找出進程號lsofnawk{print$2}sortuniqcsortnrmore

7)關于用lsof打開文件數(shù)找到的線索,用lsofp PID查看進程打開的句柄。直接查看打開的文件。

8)啟動容器的時候又總是“open too many files。那就是打開文件數(shù)的問題,因為CPU的使用率是CPU的使用時間和空閑時間比,有可能因為打開文件數(shù)阻塞而導致CPU都在等待。針對連接數(shù)的問題,大不了最后一步試試echo 6553500gt;/proc/sys/fs/filemax測試打開文件對CPU的影響。

9)玩意測出來了消耗CPU的進程,可以使用strace最終程序。用戶態(tài)的函數(shù)調用跟蹤用「ltrace」,所以這里我們應該用「strace」p PID

10)從程序里面看到調用系統(tǒng)底層的函數(shù)可以跟蹤。跟蹤操作straceTe*p PID,主要看看代碼調用的函數(shù)有沒有問題。

2、現(xiàn)場排查

第二天同樣時間,ECS果然暴漲了CPU。這是時候zabbix的工作如希望進行保留了一臺故障的ECS1給我。

1)用htop看到資源使用最大是,搜索引擎下我寫的一個判斷腳本xunsearch.sh。腳本里面很簡單,判斷索引和搜索服務缺一個就全部重啟。就當是我的容器有問題我直接關掉搜索引擎容器。httpd頂上,我又關掉apache容器。rabbitmq相關進程又頂上。這時候我沒心情周旋了,肯定不也是這個原因。sarb查看的歷史io也沒有異常。

2)統(tǒng)計tcp連接,幾百。先不用著重考慮攻擊了。用tailn 1200/var/log/messages查看內核日志,是TCP TIME WAIT的錯誤??梢岳斫鉃镃PU使用100%,程序無響應外面的tcp請求超時。這是結果,還是沒有找到根本原因。

接著往下看系統(tǒng)內核日志,發(fā)現(xiàn)了和“open too many files”呼應的錯誤,“filemax limit 65535 reached”意思是,已到達了文件限制瓶頸。這里保持懷疑,繼續(xù)收集其他信息。

3)查看進程數(shù)量,數(shù)量幾百。列出來也看到都是熟悉的進程,可以先排除異常進程。

4)監(jiān)控容器的資源使用,里面很不穩(wěn)定,首先是xunsearch容器使用80%的CPU,關掉xunsearch,又變成了其他容器使用CPU最高。很大程度上可以排查容器的問題和執(zhí)行程序的問題。

5)查看了最大連接數(shù)cat/proc/sys/fs/filemax是65535但是用lsof查到的連接數(shù)是10000多,完全沒有達到連接數(shù)。

6)各項參數(shù)都正常,現(xiàn)在聚焦在打開的文件數(shù)這個問題上面。也可以用另外同一種方式查看一下內核統(tǒng)計文件/proc/sys/fs/filenr,比較一下差異,看看能不能找出問題。cat了一下,打開文件數(shù)是66080,果然超了內核日志就以這個為標準。

但是看lsof怎么統(tǒng)計不出來,ll/proc/PID/fd也沒幾個。這個問題放在后面,先按照步驟echo 6553500gt;/proc/sys/fs/filemax給連接數(shù)提高到100倍,CPU果然降了下來。原因確認了,但是必須找到根源,為什么忽然有這么大的打開文件數(shù)。關掉全部docker容器和docker引擎,打開文件數(shù)是少了一點,但是仍然在65535差不多。我就先排除一下業(yè)務的影響,把ECS3的nginx直接指向視頻ECS2的apache,就等同于在ECS2上實現(xiàn)了ECS1的場景。查看一下ECS2的句柄數(shù),才4000多,排除了業(yè)務相關應用對服務器的影響。那就能下個小結論,ECS1被神秘程序打開了6萬多句柄數(shù),打開業(yè)務就多了2000多的句柄數(shù),然后就崩潰了。不過這個現(xiàn)象有點奇怪,ECS2和ECS1在一樣的機房一樣的配置一樣的網(wǎng)絡環(huán)境,一樣的操作系統(tǒng),一樣的服務,一樣的容器,為什么一個有問題,一個沒問題呢不同的只是有一臺是共享nfs。難道是靜態(tài)文件共享了,其他人讀了,也算是本服務器打開的

7)現(xiàn)在程序找不到,沒法繼續(xù)lsofp了。排查之前的猜想。帶著排查得到對的結論往下想。

程序的bug和部署不當,那是不可能的,因為主要問題來自于打開句柄數(shù),當部署到ECS2那里,一切正常。docker容器的bug,那也不可能的,每個都是我親自寫腳本,親自編譯,親自構建的,關鍵是我關掉了docker容器和引擎都沒有很大改善。網(wǎng)絡攻擊也排除,因為網(wǎng)絡連接數(shù)沒幾個,流量也不變。那就只剩下病毒入侵也不是,沒有異常進程??紤]到ECS的穩(wěn)定性問題了。這方面就協(xié)助阿里云工程師去排查。

8)阿里云工程師用的排查手段和我差不多,最終也是沒能看到什么。也只是給了我一些治標不治本的建議。后來上升到專家排查,專家直接在阿里云后端抓取了coredump文件分析打開的文件是圖片,程序是nfsd。

好像印證了我剛才后面的猜想,應該就是ECS1使用了nfs共享其他服務器打開了然后算在ECS1頭上。那問題又來了,我們的業(yè)務已經(jīng)到達了可以影響服務器的程度嗎

9)既然問題解決到這一步,先不管程序有沒有關閉打開的文件和nfs的配置。我們架構上面的圖片應該是歸nginx讀取,難道是linux的內存機制讓它緩存了。帶著緩存的問題,首先去ECS3上釋放內存echo 3gt;/proc/sys/vm/dropcaches,釋放之后,發(fā)現(xiàn)沒什么改善,有點失落??偸怯X得還有一臺后端是PHP主導,但是邏輯上是寫入,沒有打開文件之說。后來從程序員中了解到,PHP也有打開圖片。我猛然去ECS2釋放一下內存,果然,句柄數(shù)降下來。(這里大家一定有個疑問,為什么我直接想到內存緩存而不是目前打開的文件呢。其一,這是生產(chǎn)環(huán)境,web前端只有一個,不能亂來停服務。其二,第一次遇到問題的時候,重啟之后沒有問題,過了一天之后積累到一定的程度才爆發(fā),這里已經(jīng)引導了我的思路是積累的問題,那就是緩存不斷積累了)

10)因為ECS2的調用ECS1的nfs共享文件,所以lsof也有讀不到那么多句柄數(shù)的理由。如果說是nfs的服務本身就有緩存,導致問題的話,我查看了配置文件,還是默認值允許緩存,30S過期,根本不會因為nfs的緩存造成打開文件過多。如果我們的后端程序打開之后沒好好處理的話,那倒有可能。然后嘗試排除:我改了ECS3的配置,使程序只讀ECS1后端,從ECS1上面卻看不到有什么異常表現(xiàn),說明PHP程序已經(jīng)好好處理了打開的文件。也不是docker掛載了nfs的共享的問題,因為nginx也有掛載。排查到這里也很大程度上解決問題,而且緩存了nfs的全部共享文件,句柄并沒有增加,也算合理,所以就增加了打開文件數(shù)的限制。

11)現(xiàn)在排查的結果是跟后端和nfs共享有關。就是說,后端掛載了nfs的網(wǎng)絡共享,被程序讀取。而程序釋放之后,在正常背景的硬盤文件是沒有緩存的。但是在nfs掛載的環(huán)境下,緩存并沒有得到釋放。

12)總結:很多問題的排查和我們的猜想結果一樣,但是有些例外的情況。比如這次我想到的原因都一一排除,但是問題也是在一步步排查中,逐步被發(fā)現(xiàn)的。


文章推薦
TikTok賬號運營問題歸納總結,tiktok個人賬戶如何修改個人簡介
不可錯過的亞馬遜寶藏站點最全運營攻略奉上,亞馬遜旅程詳解
YouTube營銷指南(3),youtube營銷
爆款產(chǎn)品突然就賣不動了,爆款產(chǎn)品賣不動怎么辦


特別聲明:以上文章內容僅代表作者本人觀點,不代表ESG跨境電商觀點或立場。如有關于作品內容、版權或其它問題請于作品發(fā)表后的30日內與ESG跨境電商聯(lián)系。

搜索 放大鏡
韓國平臺交流群
加入
韓國平臺交流群
掃碼進群
歐洲多平臺交流群
加入
歐洲多平臺交流群
掃碼進群
美國賣家交流群
加入
美國賣家交流群
掃碼進群
ESG跨境專屬福利分享群
加入
ESG跨境專屬福利分享群
掃碼進群
拉美電商交流群
加入
拉美電商交流群
掃碼進群
亞馬遜跨境增長交流群
加入
亞馬遜跨境增長交流群
掃碼進群
亞馬遜跨境增長交流群
加入
亞馬遜跨境增長交流群
掃碼進群
拉美電商交流群
加入
拉美電商交流群
掃碼進群
ESG獨家招商-PHH GROUP賣家交流群
加入
ESG獨家招商-PHH GROUP賣家交流群
掃碼進群
《韓國平臺運營干貨包》
《波蘭allegro知識百科》
《Darty知識百科》
《法國Fnac知識百科》
《PEAKS 出海經(jīng)營方法論白皮書》
2025跨境電商營銷日歷
《2024年全球消費趨勢白皮書——美國篇》
《2024TikTok出海達人營銷白皮書》
《Coupang自注冊指南》
《eMAG知識百科》
通過ESG入駐平臺,您將解鎖
綠色通道,更高的入駐成功率
專業(yè)1v1客戶經(jīng)理服務
運營實操指導
運營提效資源福利
平臺官方專屬優(yōu)惠
聯(lián)系顧問

平臺顧問

平臺顧問 平臺顧問

微信掃一掃
馬上聯(lián)系在線顧問

icon icon

小程序

微信小程序

ESG跨境小程序
手機入駐更便捷

icon icon

返回頂部

【免費領取】全球跨境電商運營干貨 關閉
進行中
進行中
《韓國平臺運營干貨包》
包含四個韓國干貨報告:Coupang自注冊指南、GMK站內推廣指南、韓國大促熱銷品詳細預測、韓國節(jié)日營銷全攻略
免費領取
進行中
進行中
TikTok運營必備干貨包
包含8個TikTok最新運營指南(市場趨勢、運營手冊、節(jié)日攻略等),官方出品,專業(yè)全面!
免費領取
進行中
進行中
韓國電商節(jié)日營銷指南
10+韓國電商重要營銷節(jié)點詳細解讀;全年度各節(jié)日熱度選品助力引爆訂單增長;8大節(jié)日營銷技巧輕松撬動大促流量密碼。
免費領取
進行中
進行中
【平臺干貨】eMAG知識百科
涵蓋從開店到大賣6個板塊:開店、運營、廣告、選品、上架、物流
免費領取
進行中
進行中
全球平臺詳解——全球合集
涵括全球100+個電商平臺的核心信息,包括平臺精煉簡介、競爭優(yōu)勢、熱銷品類、入駐要求以及入駐須知等關鍵內容。
立即領取
進行中
進行中
韓國coupang平臺自注冊指南
韓國Coupang電商平臺從注冊準備、提交申請到完成注冊,開店全流程詳細指引。
免費領取
進行中
進行中
2025跨境電商營銷日歷
包括傳統(tǒng)中、外重要節(jié)日及重點電商營銷節(jié)點還對營銷關鍵市場、選品輔以說明,讓你的365天安排的明明白白!
免費領取
進行中
進行中
全球平臺詳解——歐洲篇
涵蓋20+歐洲電商平臺,詳細解讀優(yōu)勢、入駐條件、熱銷品等
立即領取