2012-03-16 178 views
8

我有一个网站在Azure web角色上运行,我可以通过修改web.config来强制重新启动应用程序,但是如果我想重新启动IIS,我被告知我不应该通过远程桌面手动执行此操作,而是我应该重新启动Azure托管的进程。是否可以在不重新启动进程的情况下重新启动Azure Web角色上的IIS?

This article seems to agree with this opinion。

我的问题是,重新启动一个进程可能需要近10-15分钟才能重新启动。有没有更快的方法来实现这一点?

我目前使用windows.azure.com用户界面来执行所有的部署和管理。

+0

为什么你要重新启动在首位的IIS? – astaykov 2012-03-16 10:53:48

+0

@astaykov可能太长以至于无法放入注释,但我们使用的是Umbraco Accelerator,并且存在某些需要重新启动角色的操作,并且我相信我可以通过IIS重新启动实现同样的操作。除此之外,我们正在使用在测试阶段使用的检查Azure,因此我需要偶尔能够重新启动IIS。 – Digbyswift 2012-03-16 12:30:05

+0

总有些情况下,您想要(以实例为基础)执行iisreset或类似操作。 – 2012-09-26 08:38:49

回答

7

在这里指出几件事情。当您的角色启动时,它会使用一些名为IISConfigurator的程序以编程方式向IIS调用,并创建如服务定义中定义的应用程序,vdirs,应用程序池等。这是在启动时完成的。

记住,承载您的网站的W3wp.exe进程是指您可以在运行代码RoleEntryPoint完全分开。因此,您不能只调用RoleEntryPoint.RequestRecycle()并期望IIS将重新启动(它不会)。

一个解决方案,如果你必须重新启动IIS,你可以尝试是编程做到这一点。这里是我在Windows Azure上重新启动IIS 3线的解决方案:

var mgr = new ServerManager(); 
var azurePools = mgr.ApplicationPools.Where(p => Guid.TryParse(p.Name)); 
azurePools.ToList().ForEach(p => p.Recycle()); 

我现在用的是知识应用程序池的GUID在Windows Azure的将它们过滤到我感兴趣的那些

现在,您只需要一种方法来在每个实例上按需提升状态运行代码。这是很多解决方案的常见问题。也许每当需要重新启动IIS时,每个实例都会轮询文件或表以获取信号以运行该代码。

+0

+1这是很好的知道。在我们的例子中,我们没有任何在RoleEntryPoint中运行的代码。这就是为什么重新启动IIS适合我们的原因。你会建议在生产实例中运行上面的代码吗? – 2012-03-16 18:56:23

+0

非常有用,非常感谢。 – Digbyswift 2012-03-19 09:17:42

+0

该解决方案与iis-reset或RDP手动重启IIS进程有何不同?这只是通过代码来完成的。 如果您链接的文章是真实的,那么这完全没有区别。会吗? – ryancrawcour 2012-03-22 07:50:42

0

你可以尝试远程桌面实例和回收IIS这样

+1

这正是我被告知我不应该这样做 - 手动重新启动IIS。 – Digbyswift 2012-03-16 09:57:21

+0

我还以为你在开发/测试中运行,然后它确实无所谓。如果该角色按照该帖子中的建议死亡,那么您将不得不通过Mngt控制台或API重新启动它。 – ryancrawcour 2012-03-22 07:52:43

2

为什么你需要重新启动实例?您在生产部署中是否遇到内存泄漏或其他问题?在生产环境中,唯一真正安全的重启实例的方式是通过Azure管理门户或Azure管理REST API。

如果你和一个开发/测试部署工作,你可以在RDP并使用Set-RoleInstanceStatus PowerShell命令把你的实例脱机。此时,您可以自由运行IISReset,重新启动WWW发布服务,修改web.config,将新dll复制到bin文件夹等等。我们随时使用我们的开发/测试实例执行这些操作,而无需使用问题,但我们绝不会通过RDP修改我们的生产实例,除非我们需要解决紧急问题。

+0

有用的信息谢谢。 – Digbyswift 2012-03-16 12:31:34

+0

我肯定会在这里同意。你需要找出为什么你需要回收你的IIS进程。如果你有内存泄漏,那么你将要解决这个问题! – ryancrawcour 2012-03-22 07:51:27

1

如果您部署应用程序作为应用服务“YOURNAME”像

Azure App Service

网址为http://yourname.azurewebsites.net 你应该能够使用相同的凭据作为Azure管理连接到http://yourname.scm.azurewebsites.net 。 在这个网址找到Kudu为各自的应用程序服务。

如果您在菜单中选择工具>支持,然后选择分析>度量 ,那么您应该可以点击“重新启动w3wp”。

Kudu UI

时间的应用程序,以便再次运行并不意外长,我测试3个应用程序。

如果你只需要以“守” W3WP,那么你可以检查https://youname.scm.azurewebsites.net/ProcessExplorer/

相关问题