【问题标题】:IIS won't cache large (76MB) fileIIS 不会缓存大 (76MB) 文件
【发布时间】:2018-01-02 05:05:16
【问题描述】:

我似乎无法让 Windows 2012 R2 上的 IIS 缓存大型 .exe 文件。也就是说,当我不断请求文件时,我看到文件在资源监视器中不断被读取,并且正在运行

netsh http show cachestate

不显示缓存的文件。

我想我已经将系统配置为缓存内核中文件夹的 .exe 文件,并且没有最大文件大小。总缓存大小限制为 0,据我了解,这将使系统使用多达一半的内存。服务器有 6 GB 的 RAM,其中有很多是免费的。

即在Web服务器根目录的Output Cache设置中:

  • 最大缓存响应大小(以字节为单位)= 0(也反映在 applicationHost.config 的 maxResponseSize 值中)
  • 未检查缓存大小限制(以 MB 为单位)(也在 applicationHost.config maxCacheSize = 0 中)
  • 已选中启用缓存和启用内核缓存(在 applicationHost.config 中均设置为 true

我从配置为 4.0 ASP.NET 应用程序的虚拟文件夹中提供文件。 4.6.2 已安装。虚拟文件夹指向同一系统上的 UNC 共享。 (我知道我可以指向本地文件系统;我正在模拟另一个系统上的托管文件。)

web.config 文件:

<?xml version="1.0" encoding="utf-8"?>
  <configuration>
  <system.webServer>
    <handlers>
      <clear />
      <add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
    </handlers>
    <caching>
      <profiles>
        <add extension=".txt" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange" />
        <add extension=".exe" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange" />
      </profiles>
    </caching>
  </system.webServer>
</configuration>

它将缓存小的 .txt 和 .exe 文件(每个大约 20 字节)。

我错过了什么阻止 IIS 缓存大文件?

【问题讨论】:

  • 我已经尝试指向本地文件系统而不是系统上的 UNC 共享,但这没有任何区别。
  • 用不同的文件大小测试,它会缓存一个256000字节的文件而不是300000字节的文件。感觉好像还有一个我没有找到的默认为 256KB 的限制。

标签: asp.net caching iis iis-8.5


【解决方案1】:

根据控制文件大小的注册表(UriMaxUriBytes) 可以缓存在内核上的是16 MB。还有很多 http.sys 不会缓存内容的场景。请检查 这个KB article instances-in-which-http-sys-does-not-cache-content

要使其正常工作 - 在以下注册表项下创建以下 DWORD 值:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters

  • UriMaxUriBytes -UriMaxUriBytes 262144(字节)4096(4k) – 16777216(16MB) 字节 任何大于此值的响应都不会缓存在内核响应缓存中。 1 3

  • UriScavengerPeriod - 确定缓存清除程序的频率。在等于 UriScavengerPeriod 的秒数内未访问的任何响应或片段都会被刷新。

您还可以调整 UriMaxCacheMegabyteCount(指定内核模式缓存可用的最大内存。)默认为零供 http.sys 决定,但您可以设置一个较高的值

所以你可以

  1. 设置 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters\UriMaxUriBytes 转至 16777216
  2. 从文件小于 16 MB 的非 UNC 目录检查
  3. 没有对此请求进行身份验证或没有为此 MIME 类型启用动态压缩

更多细节可以在msdnserver performance tuning找到

希望这会有所帮助!

【讨论】:

  • 我想我已经达到了 16MB 的限制。网络上只有少数地方提到它。这表明我应该研究用户模式缓存。
  • 在 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Inetinfo\Parameters 中将 MaxCachedFileSize 设置为较大的值(例如 256MB)并回收 w3wp 工作。
猜你喜欢
  • 1970-01-01
  • 2018-02-01
  • 1970-01-01
  • 2012-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多