我有一个在共享托管环境中运行的MVC 5站点。它使用Linq to Sql进行数据访问。每天大约5-8次在System.Runtime.CompilerServices.RuntimeHelpers中遇到“Out of Memory Exception”。问题出现在不同的请求上并且是间歇性的。当系统在单个表中查找单个记录时,它似乎在控制器方法的早期发生。托管服务提供商似乎无法提供帮助。错误报告如下:
ClaytonBocce.org发生了一个应用程序错误
申请领域:/ LM / W3SVC / 119 / ROOT-1-131413223158297977 信任等级:完整 应用虚拟路径:/ 应用程序路径:D:\ inetpub \ claytonbocce \ 机器名称:WEBA36
活动代码:3005 事件消息:发生了未处理的异常。 活动时间:6/7/2017 10:20:34 AM 活动时间(UTC):6/7/2017 5:20:34 PM 事件ID:f643ddd5511449fba679c11b0e67d562 事件顺序:152 事件发生:1 活动详细代码:0
流程信息: 进程ID:1012212 进程名称:w3wp.exe 帐户名称:WEBA36 \ IUSR_216.119.96.82
异常信息: 异常类型:System.OutOfMemoryException 异常消息:抛出了类型'System.OutOfMemoryException'的异常。
请求信息: 请求网址:https://www.claytonbocce.org:443/League/Match/4612/281 申请路径:/ League / Match / 4612/281 用户主机地址:66.234.194.42 用户: 经过身份验证:错误 验证类型: 线程帐户名称:WEBA36 \ IUSR_216.119.96.82
主题信息: 主题ID:340 线程帐户名称:WEBA36 \ IUSR_216.119.96.82 冒充:假 堆栈跟踪:在
System.Runtime.CompilerServices.RuntimeHelpers._CompileMethod(IRuntimeMethodInfo method)
at System.Reflection.Emit.DynamicMethod.CreateDelegate(Type delegateType)
at System.Data.Linq.SqlClient.ObjectReaderCompiler.Compile(SqlExpression expression, Type 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 query)
at System.Data.Linq.DataQuery`1.System.Linq.IQueryProvider.Execute[S](Expression expression)
at BocceData.Model.BocceWork.get_CurrentSeason() in D:\Users\dev\Documents\Visual Studio 2015\Projects\ClaytonBocce\BocceData\Model\BocceActive.cs:line 15
at BocceData.Model.BocceWork.SetSeason(Int32 sid) in D:\Users\dev\Documents\Visual Studio 2015\Projects\ClaytonBocce\BocceData\Model\BocceActive.cs:line 37
at BocceData.Model.BocceWork.GoToSeason(Int32 sid, Boolean requireTeam) in D:\Users\dev\Documents\Visual Studio 2015\Projects\ClaytonBocce\BocceData\Model\BocceActive.cs:line 66
at BocceData.Model.BocceWork.set_ActiveValue(String value) in D:\Users\dev\Documents\Visual Studio 2015\Projects\ClaytonBocce\BocceData\Model\BocceActive.cs:line 119
at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.InvokeActionMethodFilterAsynchronouslyRecursive(Int32 filterIndex)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass33.<BeginInvokeActionMethodWithFilters>b__31(AsyncCallback asyncCallback, Object asyncState)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.Begin(AsyncCallback callback, Object state, Int32 timeout)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters, AsyncCallback callback, Object state)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.<BeginInvokeAction>b__19(AsyncCallback asyncCallback, Object asyncState)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.Begin(AsyncCallback callback, Object state, Int32 timeout)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeAction(ControllerContext controllerContext, String actionName, AsyncCallback callback, Object state)
at System.Web.Mvc.Controller.<BeginExecuteCore>b__1c(AsyncCallback asyncCallback, Object asyncState, ExecuteCoreState innerState)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallBeginDelegate(AsyncCallback callback, Object callbackState)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.Begin(AsyncCallback callback, Object state, Int32 timeout)
at System.Web.Mvc.Controller.BeginExecuteCore(AsyncCallback callback, Object state)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.Begin(AsyncCallback callback, Object state, Int32 timeout)
at System.Web.Mvc.Controller.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state)
at System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__4(AsyncCallback asyncCallback, Object asyncState, ProcessRequestState innerState)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallBeginDelegate(AsyncCallback callback, Object callbackState)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.Begin(AsyncCallback callback, Object state, Int32 timeout)
at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
以下是在此故障中调用LINQ的代码。第15行是get的第一行。 BocceSeasons是一个LINQ to SQL表。但这不是唯一的失败地点;内存异常在不同的位置引发,并且在应用程序的任何一个位置都不一致,但始终在System.Runtime.CompilerServices.RuntimeHelpers._CompileMethod中。
public BocceSeason CurrentSeason
{
get
{
BocceSeason sn = BocceSeasons.OrderByDescending(s => s.id).FirstOrDefault(s => s.IsCurrent);
if (sn == null) throw new ApplicationException("BocceActive: No current season found");
return sn;
}
}