手动重新启动Azure辅助角色“WaWorkerHost.exe”
据我所知,Azure Worker角色是在名为WaWorkerHost.exe的Host应用程序的帮助下运行的,还有另一个名为WaHostBootstrapper.exe的应用程序,用于检查WaWorkerHost.exe是否正在运行,如果没有,它将运行WaWorkerHost.exe 。
- 这种“工人角色状态检查”多久发生一次?
-
如何快速重新启动Worker角色? 我可以重启机器工作者角色正在运行并等待几分钟或选择以下传统方法:
Taskkill / im / f WaWorkerHost.exe
并等待几分钟让WaHostBootstrapper.exe启动,但这非常低效和缓慢。 是否有任何(即时)方法重新启动辅助角色?
-
我可以运行类似下面的内容并期望与WaHostBootstapper.exe类似的结果或还有其他考虑因素吗?
WaWorkerHost.exe {MyAzureWorkerRole.dll}
- 引导程序每1秒检查一次WaWorkerHost状态。
您可以通过查看跟踪的间隔在bootsrapper日志(c:\ resources \ WaHostBootstrapper.txt)中看到它:
“从客户端WaWorkerHost.exe获取状态”
- 您可以使用Azure支持团队使用的AzureTools 。
其中一项function是优雅地回收角色实例:
或者,您可以以编程方式重新启动实例:
- 将管理证书上传到您的订阅。
- 使用以下代码以编程方式重新启动实例:
使用Microsoft Azure计算管理库 :
X509Certificate2 cert = new X509Certificate2(""); var credentials = new CertificateCloudCredentials("your_subscription_id", cert); using (var managementClient = new ComputeManagementClient(credentials)) { OperationStatusResponse response = await managementClient.Deployments.RebootRoleInstanceByDeploymentSlotAsync( "cloud_service_name", DeploymentSlot.Production, // or staging "instance_name"); }
-
建议不要这样做,原因有三:
- bootsrapper每秒检查一次,这对大多数情况来说应该足够了。
- 这可能会导致奇怪的问题。 例如,你杀死了worker,bootstrapper识别出worker已关闭,你手动启动worker,bootstrapper也试图启动worker而失败(会崩溃?会进入僵尸状态吗?)。 它可能导致不健康的引导程序,意味着没有任何事情可以处理工作进程。
- 当然,这取决于引导程序除了启动工作程序之外的其他function。 但即使它目前只是启动角色,你也无法确定明天的Azure团队是否会决定增加更多的职责/行动。
如果角色本身意识到需要重新启动,则可以调用RoleEnvironment.RequestRecycle
以使角色实例重新启动。