天天看點

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

問題描述

雲服務(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等不同的系列機型。修改完成後重新打包雲服務并進行部署。

  • 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

修改方式如下:

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

三:檢視執行個體中具體是那個程序消耗CPU最高及時間規律

在CPU高的情況下RDP到目前執行個體上,打開任務管理器,到程序選項,看一下是哪個程序占用的CPU比較高,這是目前直覺的方式之一。其他方式還包含:

  • 開啟Performance Monitor并設定抓取程序,詳細步驟參考文章:【Azure微服務 Service Fabric 】在SF節點中開啟Performance Monitor及設定抓取程序的方式
  • 在Azure中開啟Application Insights收集 Azure 雲服務的性能計數器, 詳細步驟參考文章:Application Insights

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

當在複雜的環境中面臨問題,格物之道需:濁而靜之徐清,安以動之徐生。 雲中,恰是如此!

繼續閱讀