Azure Compute Service工作人员在扩展后变得"忙碌"

bjo*_*ern 2 azure azure-worker-roles azure-configuration azure-cloud-services

我在Azure中运行了一个具有4个工作实例的服务.当我扩展到5个工作器实例时,已启动的第一个实例进入"忙"状态.这是为什么?放大期间会发生什么?azure会重新运行所有启动任务吗?我很困惑,似乎无法找到任何关于此的文档.

在扩展到5个实例后,第一个实例将其状态更改为:

Busy (Waiting for role to start... Application startup tasks are running. [2014-08-12T18:36:52Z])
Run Code Online (Sandbox Code Playgroud)

并且在那里运行的java进程停止了.为什么会这样?!

任何帮助,将不胜感激.

STARTUP.CMD

REM   Log the startup date and time.
ECHO Startup.cmd: >> "%TEMP%\StartupLog.txt" 2>&1
ECHO Current date and time: >> "%TEMP%\StartupLog.txt" 2>&1
DATE /T >> "%TEMP%\StartupLog.txt" 2>&1
TIME /T >> "%TEMP%\StartupLog.txt" 2>&1

REM enable ICMP
netsh advfirewall firewall add rule name="ICMPv6 echo" dir=in action=allow enable=yes protocol=icmpv6:128,any

ECHO Starting WebService >> "%TEMP%\StartupLog.txt" 2>&1
tasklist /FI "IMAGENAME eq java.exe" 2>NUL | find /I /N "java.exe" >NUL 2>&1
if "%ERRORLEVEL%"=="0" GOTO running

SET %ERRORLEVEL% = 0
START /B java -jar WEB-SERVICE-1_0--SNAPSHOT.jar app.properties >> "%TEMP%\StartupLog.txt" 2>&1

:running
SET %ERRORLEVEL% = 0
Run Code Online (Sandbox Code Playgroud)

kwi*_*ill 5

在扩展操作期间,Azure将通过Changing事件将RoleEnvironmentTopologyChange发送到所有现有实例.这使得这些实例可以发现新的角色实例,以便允许实例之间的通信.请注意,只有在您定义了内部端点时才会发生这种情况(如果您打开RDP,则隐式获取内部端点).

默认情况下,这些拓扑更改不会影响运行的实例.但是,如果您订阅了Changing事件并进行了设置,e.Cancel=True那么角色实例将重新启动并再次运行您的启动任务.

有关拓扑更改的更多信息,请参阅http://azure.microsoft.com/blog/2011/01/04/responding-to-role-topology-changes/.

所以这里有两个问题:

  1. 为什么你的角色无法从回收中恢复?这是一个重要问题,您必须修复这个问题才能获得可靠的服务.您可以从http://blogs.msdn.com/b/kwill/archive/2013/08/09/windows-azure-paas-compute-diagnostics-data.aspx,特别是方案3中的故障排除工作流程开始.http://blogs.msdn.com/b/kwill/archive/2013/09/06/troubleshooting-scenario-3-role-stuck-in-busy.aspx.
  2. 为什么要回收角色实例以响应拓扑更改?检查更改事件处理程序并确保未设置e.Cancel=true.