我似乎无法在Windows 2012 R2上获取IIS来缓存大型.exe文件。也就是说,当我不断请求文件时,我看到文件正在资源监视器中不断读取并运行
netsh http show cachestate
不显示缓存的文件。
我认为我已将系统配置为缓存内核中文件夹的.exe文件,并且没有最大文件大小。总缓存大小限制为0,据我所知,这将使系统占用所有内存的一半。服务器有6 GB的RAM,有很多免费的。
即,在Web服务器根目录的输出缓存设置中:
我从配置为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缓存大文件?
答案 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默认为零,但您可以给出高值
所以你可以
可在此msdn和server performance tuning
上找到更多详情希望这有帮助!