Asp.net Mvc站点内存不足

本文关键字:内存不足 站点 Mvc net Asp | 更新日期: 2023-09-27 18:02:47

我有一个奇怪的场景,在这个场景中,网站似乎不时地随机耗尽内存:它工作了几周,然后突然抛出内存不足异常,直到服务器重新启动。它可能在几周或几天后发生。我们没能确定一个规律。

这里是这个网站使用的技术物品列表:

    Net framework 3.5
  • Mvc 2.0 with c#
  • IIS 6.0在专用服务器上(无策略限制等)
  • 三层架构(ui - bll - dal)
  • Automapper 1.1.0.118
  • Elmah 1.1
  • FluentValidation 2.0
  • 版2.0.95.0
  • MvcSiteMapProvider 3.0.0.1
  • 城堡2.5.2
  • NHibernate 3.0.0.4
  • FluentNHibernate 1.1.0.0
  • PdfSharp 1.31.1789.0
  • MarkdownSharp

除此之外,该网站还包括(通过iframes)一些旧的遗留asp表单。这些表单与旧版网站(完全使用asp)上的表单相同,它们有一些问题,但旧版网站从未耗尽内存。

我已经检查了常见的东西,像所有IDisposable实现类都在using语句内,没有无限循环等

这个网站没有做任何奇怪的事情,它从数据库中提取一些数据,比如新闻,在某些表单提交后动态生成一些pdf,允许用户订阅时事通讯。

我真的很笨,我开发了很多网站,几乎到处都使用了上面提到的库,但这是我第一次遇到这种问题。

我知道这些信息不足以"找到"问题,但如果有人能想到我可能忽略的东西,或者任何东西,那将是非常欢迎的:)

编辑:一个可能很重要的细节。我们有另一个网站运行在同一台服务器上(用旧asp),它运行得很好,而另一个卡住了。所以看起来整个服务器内存并没有耗尽,否则它也不会工作。

Asp.net Mvc站点内存不足

安装DebugDiag。触发它在进程超过内存阈值时(比如在300Mb时,然后在此之后每100Mb一次)获取进程的转储。

比较转储文件应该可以让您了解是什么突然占用了所有内存

我会看看城堡是如何配置和使用的,你使用城堡来解决你的控制器依赖关系,使用ControllerBuilder.Current.SetControllerFactory方法?如果这样做,还必须记住释放控制器实例。

如果您的托管多应用程序池在IIS7/7.5和高负载上,请尝试更改gc模式。

aspnet.config

[Element](http://msdn.microsoft.com/en-us/library/ms229357.aspx Element)