在我们的生产环境中(仅),似乎从ASP.NET Web应用程序创建了过多的会话。引人注目的症状是ASPStateTempSessions表每小时生成~25K记录(当谷歌分析表明每小时该站点上的唯一用户少于500)。这导致大量等待任务,从而导致其他数据库的速度减慢和问题,从而阻碍站点性能。绝大多数会话似乎没有任何大量数据。
关于可能导致幻像会话的任何想法?我原本以为图像请求等以某种方式引起了新的会话,但这似乎不足以解释如此高的乘数。这甚至合理吗?我应该进一步探索那条大道吗?为什么在我的开发环境中没有相同的症状?
谢谢!
环境详细信息(我可以提供更多详细信息,我只是不确定还有哪些相关内容):
答案 0 :(得分:0)
我同意可能的罪魁祸首是运行SessionStateModule的平面文件,特别是如果你使用的是MVC而不是webforms。原因是为了支持无扩展URL路由,MVC将以下标记添加到您的web.config中:
<modules runAllManagedModulesForAllRequests="true">
...
该属性几乎与其名称相同,如果您从IIS中的同一网站托管图像,这将导致您遇到开销。如果您不使用无扩展名URL,则可以考虑关闭该属性,或者尝试将图像移动到像akamai或AWS cloudfront这样的CDN。
或者,您可以查找SessionStateModule备选方案,但有一些可能提供备用行为。你甚至可以通过继承System.Web.SessionState.SessionStateStoreProviderBase
来推销自己的,有一篇关于这样做的MSDN文章:custom session provider tutorial。如果你最后一次,我最近发现ResetItemTimeout
是默认SessionState模块的每个请求上最常运行的项目。
最后,我认为你所遇到的扩展是由于这个原因导致SessionState模块默认是同步的。这意味着只有在imageA释放会话锁定后,请求imageA.jpg和imageB.jpg的浏览器才会接收imageA然后接收imageB。这比Web服务器的默认行为要慢得多,后者将在不同的线程上提供服务。
另一种排除故障的方法,如果不能解决问题,就是查看通过IIS7的当前请求。为此,请转到IIS管理器左侧的顶级服务器名称,然后单击“工作进程”。它应该列出您的网站流程,双击它,它将显示所有当前请求。你应该看到大量的图像文件。