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),它运行得很好,而另一个卡住了。所以看起来整个服务器内存并没有耗尽,否则它也不会工作。安装DebugDiag。触发它在进程超过内存阈值时(比如在300Mb时,然后在此之后每100Mb一次)获取进程的转储。
比较转储文件应该可以让您了解是什么突然占用了所有内存
我会看看城堡是如何配置和使用的,你使用城堡来解决你的控制器依赖关系,使用ControllerBuilder.Current.SetControllerFactory
方法?如果这样做,还必须记住释放控制器实例。
如果您的托管多应用程序池在IIS7/7.5和高负载上,请尝试更改gc模式。
aspnet.config
[Element](http://msdn.microsoft.com/en-us/library/ms229357.aspx Element)