5

我有一个工作角色,其中运行许多线程来处理来自客户端的连接。在负载测试期间,我们注意到角色变得无响应,并保持在该状态直到我们重新启动它。在 Visual Studio 调试器中查看它(通过暂停活动进程),我们可以看到许多线程在等待,但是当它取消暂停时,没有任何活动发生。我如何知道是什么导致该角色保持在该状态?

4

1 回答 1

6

正如您提到的,当您执行负载测试时,您的 Worker 角色开始出现问题,可以安全地假设该角色最初工作正常。这会得出结论,即问题是特定于应用程序的,而不是特定于平台的。有两种方法可以从 Windows Azure VM 获取一些诊断信息:

  • 选项 1(首选):为了检查您的 Azure VM 中发生的情况,您确实需要为您的角色添加 Windows Azure 诊断,以便您可以获得性能计数器、内存详细信息、角色进程运行状况和其他从 Azure VM 转移到的数据您可以离线分析的 Azure 存储。

  • 选项 2:启用对 Azure VM 的 RDP 访问,然后登录到 Azure VM 并在 Azure VM 中安装 Perfmon、Process Explorer 和其他运行状况监控工具并监控正在发生的事情。

  • 选项 3(最后的手段):RDP 到您的 Azure VM 并安装 WinDBG 并调试主机进程

在这种情况下,当您的工作人员角色停止工作时,这是我对任何人的真正建议:

  1. 查找 CPU、内存压力、线程列表并找出哪些线程被阻塞以及可能是什么原因。
  2. 查找主机工作进程健康,上次启动时,是否由于某种原因被回收,它在 Azure VM 中运行了多长时间
  3. 如果您有一个在您的工作角色中设置为“ProgramEntryPoint”的单独进程,请检查其运行状况
  4. 在应用程序和系统级别检查事件日志以获取任何线索。在 Worker 角色中,我看不到应用程序事件日志中会有任何内容,但值得一看。
  5. 我使用进程监视器来监视一些进程并收集日志以查看进程何时死亡,最后一个状态是什么,它正在访问什么以及它是否被其他问题饿死。

最重要的是,您确实需要在 Azure VM 中挖掘根本原因,这与在本地计算机中所做的方式几乎相同。

于 2012-05-20T00:50:13.693 回答