【Azure Cloud Services】云服务频繁发生服务器崩溃的排查方案

问题描述

云服务(Cloud Services)在使用期间,频繁发生崩溃事件,在崩溃期间,查看CPU负载为100%,而且同时伴随以下情况:

  1. 部署在云服务上的应用无法访问 
  2. 远程连接云服务实例(RDP)访问黑屏,无法加载或Busy状态 

排查方案

在问题的关键点中,CPU负载达到了100%。所以首先需要排查如下几点:

  • 当前云服务是单实例还是多实例?
  • 实例的机型是小还是大?是什么型号的机器呢?
  • 实例中运行的服务是不是非常耗费CPU?
  • CPU出现满负载的情况是否有时间规律?
  • 部署在云服务上的应用请求量是否与CPU100%的规律一致?

针对以上每一点,采用不同的解决方案。

一:修改云服务的实例数量

有多种方式修改云服务实例的数量。在门户中直接修改或修改云服务配置文件ServiceConfiguration.Cloud.cscfg中<Instances count=”1″ />数量

  • 云服务门户 -> 配置

  • 修改ServiceConfiguration.Cloud.cscfg后重新发布

 

 

二:修改云服务中实例机型的大小和型号

ServiceDefinition.csdef 文件指定 Azure 用于配置云服务的设置,在其中可以指定A,D,E等不同的系列机型。修改完成后重新打包云服务并进行部署。

修改方式如下:

 

三:查看实例中具体是那个进程消耗CPU最高及时间规律

在CPU高的情况下RDP到当前实例上,打开任务管理器,到进程选项,看一下是哪个进程占用的CPU比较高,这是当前直观的方式之一。其他方式还包含:

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