問題描述
雲服務(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系列:https://docs.azure.cn/zh-cn/cloud-services/cloud-services-sizes-specs#a-series
- D系列:https://docs.azure.cn/zh-cn/cloud-services/cloud-services-sizes-specs#d-series
- E系列:https://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
參考資料