【Azure Cloud Services】雲服務頻繁發生伺服器崩潰的排查方案
- 2021 年 1 月 5 日
- 筆記
- 【Azure 雲服務】, Cloud Service, CPU100%
問題描述
雲服務(Cloud Services)在使用期間,頻繁發生崩潰事件,在崩潰期間,查看CPU負載為100%,而且同時伴隨以下情況:
- 部署在雲服務上的應用無法訪問
- 遠程連接雲服務實例(RDP)訪問黑屏,無法載入或Busy狀態
排查方案
在問題的關鍵點中,CPU負載達到了100%。所以首先需要排查如下幾點:
- 當前雲服務是單實例還是多實例?
- 實例的機型是小還是大?是什麼型號的機器呢?
- 實例中運行的服務是不是非常耗費CPU?
- CPU出現滿負載的情況是否有時間規律?
- 部署在雲服務上的應用請求量是否與CPU100%的規律一致?
針對以上每一點,採用不同的解決方案。
一:修改雲服務的實例數量
有多種方式修改雲服務實例的數量。在門戶中直接修改或修改雲服務配置文件ServiceConfiguration.Cloud.cscfg中<Instances count=”1″ />數量
- 雲服務門戶 -> 配置
- 修改ServiceConfiguration.Cloud.cscfg後重新發布
二:修改雲服務中實例機型的大小和型號
ServiceDefinition.csdef 文件指定 Azure 用於配置雲服務的設置,在其中可以指定A,D,E等不同的系列機型。修改完成後重新打包雲服務並進行部署。
- A系列://docs.azure.cn/zh-cn/cloud-services/cloud-services-sizes-specs#a-series
- D系列://docs.azure.cn/zh-cn/cloud-services/cloud-services-sizes-specs#d-series
- E系列://docs.azure.cn/zh-cn/cloud-services/cloud-services-sizes-specs#ev3-series
修改方式如下:
三:查看實例中具體是那個進程消耗CPU最高及時間規律
在CPU高的情況下RDP到當前實例上,打開任務管理器,到進程選項,看一下是哪個進程佔用的CPU比較高,這是當前直觀的方式之一。其他方式還包含:
- 開啟Performance Monitor並設置抓取進程,詳細步驟參考文章:【Azure微服務 Service Fabric 】在SF節點中開啟Performance Monitor及設置抓取進程的方式
-
在Azure中開啟Application Insights收集 Azure 雲服務的性能計數器, 詳細步驟參考文章:Application Insights
Performance Monitor 配置頁面:
四:當CPU消耗與部署在雲服務中的應用相關時,通過獲取應用DUMP文件來判斷CPU的具體消耗
當判斷出是由於某個進程而引起的CPU消耗過高,但是需要進一步分析改進程為何會佔用如此多資源時。就需要藉助抓取dump和分析dump的工具,如:Procdump(抓取),DebugDiag(分析)
Procdump抓取Dump的運行下面的命令如下:
procdump.exe -ma 9332 -c 90 -s 30 -n 3 參數說明: -ma: 表示抓full dump -c: 設置CPU的閾值,比如例子中閾值是90% -s: CPU 連續超過閾值的時間長度,比如例子中是30s,即只有在這個進程連續佔用CPU 超多90%且持續30s才會抓dump; -n: 抓dump的數量,比如3
9332 是進程id
參考資料
配置雲服務的大小: //docs.azure.cn/zh-cn/cloud-services/cloud-services-sizes-specs#configure-sizes-for-cloud-services