IIS不会缓存大型(76MB)文件

时间:2017-07-26 18:00:33

标签: asp.net caching iis iis-8.5

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

netsh http show cachestate

不显示缓存的文件。

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

即,在Web服务器根目录的输出缓存设置中:

  • 最大缓存响应大小(以字节为单位)= 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缓存大文件?

1 个答案:

答案 0 :(得分:2)

  

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

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

<强> HKEY_LOCAL_MACHINE \系统\ CurrentControlSet \服务\ HTTP \参数

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

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

您还可以调整UriMaxCacheMegabyteCount(指定内核模式缓存可用的最大内存。),http.sys默认为零,但您可以给出高值

所以你可以

  1. 集 的 HKEY_LOCAL_MACHINE \系统\ CurrentControlSet \服务\ HTTP \参数\ UriMaxUriBytes 至16777216
  2. 从非UNC目录中检查文件小于16 MB
  3. 此请求未进行身份验证或未对此mime类型启用动态压缩
  4. 可在此msdnserver performance tuning

    上找到更多详情

    希望这有帮助!