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