检查ASP.NET MVC3应用程序中的内存使用情况的最佳方法是什么?
我的宿主提供商告诉我要经常回收IIS应用程序池,以提高站点的速度。这就是所谓的“推荐实践”吗?我当然不需要频繁地重启我的应用程序?我更愿意找出这是不是我的应用程序中的内存使用问题,并纠正它。因此,你使用的任何技巧和最佳实践也会很有帮助。
该应用程序基于ASP.NET MVC3、C#和EF Code First。任何指导,链接感谢。
编辑:我在发帖后发现了这个页面,它非常有用。但我还是想听听其他的意见。
ASP.NET MVC and EF Code First Memory Usage
谢谢
发布于 2012-02-23 16:29:58
默认情况下,IIS会以一段时间间隔(我认为是29小时左右)自动回收应用程序池,但这肯定是由主机设置的,无论进程使用的内存有多少或多大。THe回收触发器可以是时间间隔,也可以是进程达到某个内存使用限制时的回收触发器。我相信任何共享主机都设置了这两项。
关于内存使用情况,您可以使用GC.GetTotalMemory方法,该方法将提供大致的内存使用情况。即使在使用Perfmon时,读数也不是很准确,但它给了您一个概念。
//global.asax.cs
void Application_EndRequest(object o,EventArgs a)
{
var ctype=Context.Response.Headers["Content-Type"];
if (ctype == null || !ctype.Contains("text/html")) return;
Context.Response.Write(string.format("<p>Memory usage: {0}</p>",GC.GetTotalMemory(false)));
}请注意,您将看到使用率不断增加,直到GC生效,使用率将下降到一个更“现实”的值。
如果你有钱,我推荐一个专门的工具,比如Memory profiler
如果应用程序有内存或性能问题,您至少可以做好准备的其他事情:
发布于 2012-02-24 00:19:28
我有一个从不回收的网站(直到每周重新启动机器)
您的应用程序通常应该保持良好的性能。如果不是这样,那一定是泄漏了。这可能是因为
有更多的原因-但这些是几个主要的原因。
所以真正的问题是‘没有最佳实践--这取决于你的应用程序’。
如果您在重新启动期间担心当前会话,请记住,重新启动可以很快,并且允许当前请求完成(有时),并且表单身份验证令牌将在重新启动后存活下来,但是,除非您配置进程外状态服务器,否则会话将无法存活。
如果你的内存使用量持续增长,那么设置一个重新启动计划,否则一周一次,或者永远不做-或者一旦内存使用到XYZ,就设置,然后重置。一旦达到某个阈值,ASP.NET也会根据主机在memoryLimit上的设置自动重启:http://msdn.microsoft.com/en-us/library/7w2sway1.aspx
https://stackoverflow.com/questions/9408802
复制相似问题