在 Azure 网站上禁用池回收

Posted

技术标签:

【中文标题】在 Azure 网站上禁用池回收【英文标题】:Disable pool recycling on Azure Websites 【发布时间】:2015-02-09 19:53:50 【问题描述】:

我在 Azure 网站上部署了一个网站,我想禁用池回收。

如果您有常规的 IIS 安装,您可以在应用程序池高级设置中通过将“回收 -> 禁用重叠回收”设置为 true 来禁用此功能。

但我似乎无法在 azure 管理控制台中找到此选项,也没有在线找到有关此主题的任何信息。

任何指针将不胜感激!

【问题讨论】:

【参考方案1】:

您必须使用类似于https://github.com/projectkudu/kudu/wiki/Xdt-transform-samples#remove-all-your-recycling-options-from-your-net-4-application-pool-and-make-it-available-always 中提到的 XDT 转换。

更多关于使用转换的细节在http://blogs.msdn.com/b/waws/archive/2014/06/17/transform-your-microsoft-azure-web-site.aspx

【讨论】:

【参考方案2】:

非常感谢 Puneet Gupta 为我指明了正确的方向! 我无法使用确切的解决方案,但它让我走上了正确的道路。

我是这样解决这个问题的:

1) 获取 applicationHost.config。 最简单的方法是通过“文件”通过 SCM 控制台,然后按照 json 中的链接。 最后,你到了这里:https://YOUR_WEBSITE_NAME.scm.azurewebsites.net/api/vfs/LocalSiteRoot/Config/applicationhost.config

2) 识别重叠回收的当前状态。 在 applicationHost.config 文件中,查找“applicationPools”元素 它应该是这样的:

<applicationPools>
  <add name="YOUR_SITE_NAME" managedRuntimeVersion="v4.0">
    <processModel identityType="ApplicationPoolIdentity" />
  </add>
  <add name="~1YOUR_SITE_NAME" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated">
    <processModel identityType="ApplicationPoolIdentity" />
  </add>
</applicationPools>

如果你看到这个,那么重叠回收是启用! 你不能直接写入这个文件,但幸运的是微软给了我们改造它的能力!

3) 改造它! 您可以通过将 applicationHost.xdt 文件放在网站的 /site 目录中来转换 applicationHost.config 文件(请注意,网站本身部署在 /site/wwwroot 目录中,因此您的 applicationHost.xdt 转换必须驻留在您网站所在位置的父文件夹。 如果你想禁用重叠回收,那么这就是你放在文件中的内容:

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">>
  <system.applicationHost>
    <applicationPools>
      <add name="YOUR_SITE_NAME" xdt:Locator="Match(name)">
        <recycling disallowOverlappingRotation="true" xdt:Transform="Insert" />
      </add>
      <add name="~1YOUR_SITE_NAMEd" xdt:Locator="Match(name)">
        <recycling disallowOverlappingRotation="true" xdt:Transform="Insert" />
      </add>
    </applicationPools>
  </system.applicationHost>
</configuration>

4) 重启网站 最后,您需要重新启动您的站点以应用您的转换。 重新启动后,再次转到第 1 步,您现在应该会看到以下内容:

<applicationPools>
  <add name="YOUR_SITE_NAME" managedRuntimeVersion="v4.0">
    <processModel identityType="ApplicationPoolIdentity" />
    <recycling disallowOverlappingRotation="true" />
  </add>
  <add name="~1YOUR_SITE_NAME" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated">
    <processModel identityType="ApplicationPoolIdentity" />
    <recycling disallowOverlappingRotation="true" />
  </add>
</applicationPools>

等等:重叠回收现在已在您的 azure 网站上禁用。

【讨论】:

您知道名称中带有“~1”的站点是什么吗?是单片机应用吗? 是的,它似乎是。 您可以使用环境变量而不是硬编码 YOUR_SITE_NAME。我发现%WEBSITE_SITE_NAME% = YOUR_SITE_NAME%WEBSITE_IIS_SITE_NAME% = ~1YOUR_SITE_NAME。 Kudu wiki 有一些使用环境变量替换的示例:github.com/projectkudu/kudu/wiki/…。 现在应该是“%XDT_SITENAME%”和“~1%XDT_SITENAME%”

以上是关于在 Azure 网站上禁用池回收的主要内容,如果未能解决你的问题,请参考以下文章

天蓝色网站的应用程序池超时

asp.net网站 如果设置iis连接池强制回收,会不会影响网站计数器访问量变化,因为我们网站的访问量总是变化

在Azure Storage 托管HTTP静态网站

IIS 请求 超时设置

解决IIS7IIS7.5 应用程序池回收假死的方法

解决IIS7IIS7.5 应用程序池回收假死的方法