我们正在运行带有 IIS 7.5 的 Win 2008 R2 服务器来提供图像文件。
它仅用于静态内容,并且文件缓存已设置为缓存文件 10 分钟。
但是 IIS 经常会完全刷新缓存(通过使用 Perfmon 看到)
这不是应用程序池回收,也不是因为TTL已经过期,所以现在我很茫然:-(
我附上了性能图表的屏幕截图,您可以清楚地看到这个问题。
我能否从某些地方看到它为何进行这些冲洗?
(注意:我知道我可以通过将调试器附加到进程来检测到它,但这不是一个选择,因为它是一个生产服务器,它无法处理调试器导致的减速)
答案1
终于找到了问题的答案。
我们在网站的 web.config 中拥有此功能(尽管网站上没有运行任何托管代码)
<caching enableKernelCache="true">
将其更改为错误的IIS 停止执行这些完全刷新。它仍会定期刷新一些文件,但不再是完全刷新(大约 50k 个文件保留在缓存中)
我们的文件缓存命中率从 5% 增加到了 33%,这无疑有很大帮助。
不确定为什么内核缓存会导致这种行为,但我可以忍受用户模式下缓存的轻微开销。
我想添加这个作为答案来帮助其他有类似问题的人。
答案2
图像的唯一 URL 的访问频率是多少? 默认情况下,如果 120 秒内没有获取 URL,它们就会被刷新。
看清道夫时期注册表项http://support.microsoft.com/kb/820129。
确定缓存清理器的频率。任何在等于 UriScavengerPeriod 的秒数内未被访问的响应或片段都将被刷新。