是否可以在不重新启动进程的情况下重新启动Azure web角色上的IIS?

是否可以在不重新启动进程的情况下重新启动Azure web角色上的IIS?,iis,azure,Iis,Azure,我有一个在Azure web角色上运行的站点,我可以通过修改web.config强制重新启动应用程序,但如果我想重新启动IIS,我被告知我永远不应该通过远程桌面手动执行此操作,而应该重新启动Azure托管进程 这是我的看法 我的问题是,重新启动进程可能需要近10-15分钟才能重新启动。有没有更快的方法来实现这一点 我当前正在使用windows.azure.com UI进行所有部署和管理。您可以尝试将远程桌面连接到实例并以这种方式回收IIS为什么需要重新启动实例?您在生产部署中是否遇到内存泄漏或其

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

这是我的看法

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


我当前正在使用windows.azure.com UI进行所有部署和管理。

您可以尝试将远程桌面连接到实例并以这种方式回收IIS

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


如果您正在使用开发/测试部署,则可以使用PowerShell Cmdlet将RDP导入并使实例脱机。此时,您可以自由地运行IISReset、重新启动WWW发布服务、修改web.config、将新DLL复制到bin文件夹等。我们一直在开发/测试实例中毫无问题地执行这些操作,但是,除非我们需要解决紧急问题,否则我们永远不会通过RDP修补生产实例。

这里需要指出几点。当您的角色启动时,它使用名为IISConfigurator的东西以编程方式调用IIS,并创建服务定义中定义的应用程序、VDIR、应用程序池等。这在启动时完成一次

请记住,承载网站的w3wp.exe进程与可能用于运行代码的RoleEntryPoint完全独立。因此,您不能只调用RoleEntryPoint.RequestRecycle()并期望IIS重新启动(不会)

如果必须重新启动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());
我利用应用程序池是WindowsAzure中的GUID这一知识,将它们筛选为我感兴趣的应用程序池


现在,您只需要一种方法,在每个实例中根据需要从提升的条件运行代码。这是一个有很多解决方案的常见问题。可能需要让每个实例轮询一个文件或表,以便在需要重新启动IIS时运行该代码。

如果您将应用程序部署为应用程序服务“YourName”,如

带url 您应该能够连接到 使用与Azure管理相同的凭据。 在此url中,您可以找到相应应用程序服务的url

如果在菜单中选择工具>支持,然后选择分析>度量 然后您应该能够单击“重新启动w3wp”

对于我测试的3个应用程序来说,应用程序再次运行的时间并不出乎意料地长


如果您只需要“观察”w3wp,那么您可以检查

这正是我被告知不应该做的事情-手动重新启动IIS。我有点假设您正在dev/test中运行,然后您做什么真的无关紧要。如果该角色按照该帖子中的建议死亡,那么您将被迫通过Mngt控制台或API重新启动它。您为什么要首先重新启动IIS?@astaykov可能太长,无法在评论中放置,但我们使用的是Umbraco加速器,有些操作需要重新启动角色,我相信通过IIS重新启动,我可能能够实现同样的效果。除此之外,我们正在使用Inspect Azure,它在测试阶段已经过时,因此我需要能够偶尔重新启动IIS。在某些情况下,您总是希望执行(基于实例的)iisreset或类似操作。+1这很好。在我们的例子中,我们没有在RoleEntryPoint中运行的任何代码。这就是重新启动IIS对我们有效的原因。您是否建议在生产实例中运行上述代码?此解决方案与iis重置或手动重新启动iis进程有何区别?这只是通过代码实现的。如果你链接到的文章是真的,那么这将没有任何区别。会吗?如果您知道偶尔需要重置IIS以响应正常的应用程序更新(例如修改CRM主题等),您通常需要一个自动化的解决方案。否则,不,这并不完全不同。RDP对于故障排除非常有用,但对于长期操作管理来说却不是那么热门。@jmac-这取决于您如何实现它。一个非平凡的实现将遍历每个实例,让它向负载平衡器报告自己正忙,然后运行此代码重新启动(然后报告为就绪)。这样,您可以在升级时保持某些实例可用。如果你只是将命令散播到每个实例上,你可能会有一段短暂的时间,让每个IIS应用程序池循环使用,直到它可以再次使用。我绝对同意这一点。您需要找出为什么需要回收IIS进程。如果您有内存泄漏,那么您将需要修复它!