asp.net – 如何知道为什么IIS应用程序池被回收
背景:
我已经部署了一个ASP.NET MVC 3应用程序,在我的机器上工作到一个shared hosting provider,并发现一些似乎与应用程序池被回收有关的问题。主机在以下情况下已将垃圾回收设置发生: >内存使用量超过200MB 我的开发机器的限制更为轻松,所以在开发过程中没有看到这样的回收。我没有管理员访问共享托管框(可以理解),所以我无法读取事件日志,以了解为什么这种回收正在发生。 题: 有没有办法我可以找出为什么我的应用程序被回收(例如Application_End),以便我可以记录它来帮助我的调试? 解决方法
无需访问事件日志(因为您处于共享托管环境中),您将要获得的最多信息来自Application_End事件,并通过向HttpRuntime(通过反射)询问一个或两个私有成员的值很遗憾不会公开露面
为此,将以下代码添加到Application_End事件中: BindingFlags staticFlags = BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.GetField; BindingFlags instanceFlags = BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField; HttpRuntime runtime = (HttpRuntime)typeof(System.Web.HttpRuntime) .InvokeMember("_theRuntime",staticFlags,null,null); if(runtime != null) { string shutDownMessage = (string)runtime.GetType() .InvokeMember("_shutDownMessage",instanceFlags,runtime,null); string shutDownStack = (string)runtime.GetType() .InvokeMember("_shutDownStack",null); // Log shutDownMessage & shutDownStack somewhere } 如果我关闭或回收我的应用程序的应用程序池,我看到以下内容: HostingEnvironment initiated shutdown HostingEnvironment caused shutdown - at System.Environment.GetStackTrace(Exception e,Boolean needFileInfo) at System.Environment.get_StackTrace() at System.Web.Hosting.HostingEnvironment.InitiateShutdownInternal() at System.Web.Hosting.HostingEnvironment.InitiateShutdownWithoutDemand() at System.Web.Hosting.PipelineRuntime.StopProcessing() 这可能与获得的一样好。 更新: 我不记得我在哪里找到这个代码,但是Drew有帮助地提醒我,这是从Scott Guthrie博客文章。 还有一些其他的私人会员可能是有用的,如: private ApplicationShutdownReason _shutdownReason; 您可以检查.NET Reflector中的这些字段(如果您仍然有一个不是时间轰炸的副本)或其他选项(Open Source Alternatives to Reflector?)。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 使用CompareValidator控件将用户输入日期与今天
- asp.net – HTTP错误403.14 – 访问网站时出现禁止错误
- asp.net-mvc – 如何创建ASP.NET MVC区域作为插件DLL?
- asp.net-mvc – 好的WiX编辑器
- asp.net-mvc – 对MVC中的模型进行条件验证
- asp.net – 如何在南希显示我的404页面?
- asp.net-mvc-3 – ASP.NET MVC 3编辑器模板中的IEnumerable
- asp.net mvc – asp.net mvc Html.ActionLink()保持路由值我
- asp.net-mvc-3 – 命名空间’Sitecore’中不存在“内核”
- asp.net-core-mvc – ASP.NET MVC6 Beta8和Windows身份验证
- Asp.net mvc 知多少(七)
- asp.net – 关系从一对多变为多对多需要更新list
- 在ASP.NET MVC 3应用程序中编辑并继续
- asp.net-core – 来自带有Entity Framework Core
- asp.net – 使用Post后面的Post方法重定向到另一
- asp.net-mvc-3 – 如何在.NET MVC3中注入用于验证
- asp.net – MVC ViewModel错误 – 没有为此对象定
- asp.net – EntityFramework.dll中发生了’Syste
- .net – 使用basicHttpBinding时使HTTPS工作
- asp.net-mvc – 刷新IdentityServer4客户端中的访