mig*_*ech 5 c# memory iis entity-framework azure
我有一个关于运行MVC应用程序的Web角色的高内存使用率的问题,使用Simple Injector作为DI,实体框架6用于DAL.应用程序在Azure云服务上作为Web角色运行,具有2个标准A2实例(2个内核,3.5 GB RAM),并且还运行CachingService(共存角色),配置了20%的内存使用量.
问题是,当实例启动或重新启动时,w3wp.exe服务的内存使用量仅为500-600 MB(所有其他应用程序的内存使用率约为50%),但即使没有请求进入,它也会启动并继续增长到1.7GB左右并停止(所有其他应用程序的内存使用率约为90%).但我注意到的是,内存有时会随机丢失,当然也会在重新启动或重新发布后丢失.
在监视内存堆之后,我注意到Gen2堆增长并且保持很大,并且在使用ANTS Memory Profiler进行本地调试之后,我看到最大数量的Gen2被具有类名"TypeUsage"和"MetadataProperty"对象的Entity Framework对象占用(" System.Data.Entity.Core.Metadata.Edm"namespace".
现在我的问题是:
这是 EF 中内存泄漏的可能性非常低,这是不好的,您不应该这样保留它。您的代码泄漏了内存。
查找泄漏的最佳方法是使用内存分析器(ANTS 是一个不错的选择,我使用 dotMemory)。探查器将向您显示泄漏的对象,它还应该向您显示其他两件重要的事情:
这些应该可以帮助您了解对象是如何创建的以及为什么它们没有被 GC 处理。
您提到大部分内存都在 Gen2 中。这意味着您泄漏的对象被“长寿”的东西引用。这可以是静态变量、ASP.Net 应用程序或类似的变量。
当 IIS 回收您的应用程序时,可能会发生内存随机丢失的情况。默认情况下,每 29 小时发生一次,但 IIS 可能配置不同,或者可能决定出于其他目的回收您的应用程序。
归档时间: |
|
查看次数: |
747 次 |
最近记录: |