【Azure Cloud Services】雲服務頻繁發生伺服器崩潰的排查方案

路邊兩盞燈發表於2021-01-05

問題描述

雲服務(Cloud Services)在使用期間,頻繁發生崩潰事件,在崩潰期間,檢視CPU負載為100%,而且同時伴隨以下情況:

  1. 部署在雲服務上的應用無法訪問 
  2. 遠端連線雲服務例項(RDP)訪問黑屏,無法載入或Busy狀態 

排查方案

在問題的關鍵點中,CPU負載達到了100%。所以首先需要排查如下幾點:

  • 當前雲服務是單例項還是多例項?
  • 例項的機型是小還是大?是什麼型號的機器呢?
  • 例項中執行的服務是不是非常耗費CPU?
  • CPU出現滿負載的情況是否有時間規律?
  • 部署在雲服務上的應用請求量是否與CPU100%的規律一致?

針對以上每一點,採用不同的解決方案。

一:修改雲服務的例項數量

有多種方式修改雲服務例項的數量。在門戶中直接修改或修改雲服務配置檔案ServiceConfiguration.Cloud.cscfg中<Instances count="1" />數量

  • 雲服務門戶 -> 配置

【Azure Cloud Services】雲服務頻繁發生伺服器崩潰的排查方案

  • 修改ServiceConfiguration.Cloud.cscfg後重新發布

【Azure Cloud Services】雲服務頻繁發生伺服器崩潰的排查方案

 

 

二:修改雲服務中例項機型的大小和型號

ServiceDefinition.csdef 檔案指定 Azure 用於配置雲服務的設定,在其中可以指定A,D,E等不同的系列機型。修改完成後重新打包雲服務並進行部署。

修改方式如下:

【Azure Cloud Services】雲服務頻繁發生伺服器崩潰的排查方案

 

三:檢視例項中具體是那個程式消耗CPU最高及時間規律

在CPU高的情況下RDP到當前例項上,開啟工作管理員,到程式選項,看一下是哪個程式佔用的CPU比較高,這是當前直觀的方式之一。其他方式還包含:

Performance Monitor 配置頁面:

 

 

【Azure Cloud Services】雲服務頻繁發生伺服器崩潰的排查方案

 

 

 

四:當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

 

參考資料

配置雲服務的大小: https://docs.azure.cn/zh-cn/cloud-services/cloud-services-sizes-specs#configure-sizes-for-cloud-services

 

相關文章