我有一个使用 ASP.NET MVC 3 和 Entity Framework 4.1 准备的网站。下图是我服务器的性能日志。
我的问题是w3wp.exe
每分钟都在变大,而且永远不会释放。我在查询中使用LINQ to Entities并且我的所有实体框架代码都在使用块中。
我认为这是一个垃圾收集问题,但我不确定。我的问题是什么,我该如何解决?
我有一个使用 ASP.NET MVC 3 和 Entity Framework 4.1 准备的网站。下图是我服务器的性能日志。
我的问题是w3wp.exe
每分钟都在变大,而且永远不会释放。我在查询中使用LINQ to Entities并且我的所有实体框架代码都在使用块中。
我认为这是一个垃圾收集问题,但我不确定。我的问题是什么,我该如何解决?
这完全取决于您的网站在做什么。我们有运行在 32 GB RAM 上的 .NET 服务器,并且工作进程很乐意接受它想要的一切。它真的需要它。
您是否在运行大量后台线程,在会话/全局应用程序/静态方法中存储了大量数据?
连接字符串、阅读器、文件I/O等是否正确关闭?
.NET 垃圾收集效果很好,但您必须尽自己的一份力量。垃圾收集器(废物处理工程师)不会进入您的房子并为您收集它,您至少必须将其走到路边……或关闭/清空/处置您不使用的物体。
更新1:
正在发生的是 ASP.NET 工作进程正在创建缓冲区。当它达到一定的内存使用量时,它会随着时间的推移而减少,但它喜欢分配内存,因此它不必在需要时不遗余力地获取它。
您应该运行分析器以查看哪些进程和线程正在失控。Visual Studio 2010 有一些不错的分析工具,我相信还有一些其他的第三方工具。
这很可能是开发人员的糟糕编码,垃圾收集可能没有像上面提到的 Ryan 那样发挥作用。特别是如果您的应用程序使用多个线程。