我们的.NET应用程序在高峰使用期间看到了很多System.OutOfMemoryExcpetions,导致我们回收应用程序池。我很难过,因为我能做些什么来缓解这个问题。为了给出一些背景知识,我们的应用程序为每个客户动态生成子域,我们有很多子域,所有子域都分成许多不同的应用程序池(每个应用程序池大约有50个客户)。我们有一个带8处理器Xenon和56GB内存的专用服务器,页面文件目前设置为20GB。
平均而言,我们服务器的物理内存使用率约为40%,所以我知道我们的服务器可以处理更多。现在,我已经阅读了很多文章,解释了为什么这个异常与整个系统内存无关,并且更多地与应用程序池中的进程被重载有关。
所以我的问题是,我该怎么做才能让这些进程能够访问每个进程更多的内存?
更新 - 我被要求包含一个堆栈tace,这里有一个用于最近的execption。请记住,我不是在寻找如何修复异常,而是如何增加进程允许使用的内存:
在System.Runtime.CompilerServices.RuntimeHelpers._CompileMethod(IRuntimeMethodInfo) 方法)
在System.Reflection.Emit.DynamicMethod.CreateDelegate(Type delegateType)
at System.Data.Linq.SqlClient.ObjectReaderCompiler.Compile(SqlExpression) 表达式,类型elementType)
at System.Data.Linq.SqlClient.SqlProvider.GetReaderFactory(SqlNode node,Type elemType)
at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression 查询) 在System.Data.Linq.DataQuery``1.System.Linq.IQueryProvider.Execute [S](表达式) 表达)
在System.Linq.Queryable.FirstOrDefault [TSource](IQueryable`1 source)
at Company.Task.TemplateTask.GetTemplateById(Template obj)