【发布时间】:2013-10-27 14:38:03
【问题描述】:
我们有一个 ASP.net MVC Web 应用程序,它在运行几天后使用了大量内存 (4GB)。我们运行它的服务器有足够的余力(CPU 运行大约 10% 和 7% 的内存使用率),但由于某种原因,随着应用程序池中内存的增加,站点的响应时间会降低。
即使是缓存的页面也需要很长时间才能加载。这些缓存的页面应该从内存中提供,这应该是即时的。我们缓存了很多页面和很多数据库调用,所以 App Pool 这么大并不让我感到惊讶,但对我来说缓存的越多,运行所需的时间越长,这对我来说没有任何意义。网站作出回应。
如果我回收应用程序池,网站又超级快了。我们使用的是 Windows 2012、IIS 8 和 SQL 2012。
有人知道为什么会发生这种情况吗?
非常感谢!
【问题讨论】:
-
如果不访问您的代码库,这似乎很难回答。您是否以某种方式集中缓存代码,以便展示您的操作方式?你是否有定时缓存过期,或任何其他机制来偶尔清除旧的/不必要的缓存?
-
感谢您的回复。我们在控制器操作中使用 Mvc OutputCacheAttribute,在存储库调用中使用 Microsoft Enterprise Library Cache。在大多数情况下,我们永远不会清除未来不会更改的项目的缓存。您是否建议缓存中的大量旧项目会减慢整个 Web 应用程序的响应时间?
-
当您的 RAM 被填满,并且相同的项目在其中放置很长时间而未被访问时,操作系统可能会决定将该数据交换到磁盘(因为它认为这样做是安全的,性能方面,因为它不会被使用)。至少,我认为 RAM 是这样工作的 =P 所以换句话说,您的缓存数据可能会导致您撞到硬盘驱动器(操作较慢)。
标签: asp.net performance caching iis