2012-05-19 67 views
5

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

回答

6

正如你所提到的那样,当你执行负载测试时,你的工作者角色会出现问题,所以假设角色最初工作正常是安全的。这推动了问题是特定于应用程序的问题,而不是特定于平台的问题。有两种方法,你可以从你的Windows Azure虚拟机得到一些诊断信息:

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

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

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

在这样的条件下,当你有一个工人的作用停止了工作,这是我真的建议到任何一个:

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

底线是你真的需要在Azure虚拟机中挖掘根本原因,方法与在内部部署机器中完全相同。

+0

非常感谢你的提示。起初,这个问题仅在Azure中的worker角色中提出,但是通过对我们的测试工具进行一些调整,我们开始看到它在开发中。 我们有: *设置远程访问/ Azure诊断 *针对应用程序特定报告设置的Perf计数器和自定义事件日志 有许多正在执行异步操作的地方。我们猜测有一个未处理的异常发生,但它证明很难找到。 – Irwin

+0

我可以问你正在使用哪个Azure SDK吗?在较旧的SDK中,Remote Forwarder存在一些问题,可能会导致Azure出现随机问题,但SDK 1.6在该问题上非常稳固。如果您使用应用程序删除RDP访问和Azure诊断程序,该问题仍会持续吗? – AvkashChauhan