6

我们最近移植了一个应用程序以使用Aspnet 样板框架,并且在内存使用方面存在许多问题。我们最初的症状是强烈的内存使用,在高使用率时没有缓解。内存使用在夜间和周末增加,但没有达到高峰时段的速度。当我键入此内容时,我正在监视并看到应用程序在系统上使用超过 5Gb 的内存,而正常使用量最多为 500 - 550mb。我们使用一些内存分析工具对应用程序进行了分析,并在框架库和我们引用的 Kestrel 版本中发现了一些潜在的泄漏,但即使在修复了这些问题之后,占用空间仍然很大。我们现在看到的行为是应用程序的内存使用量将无限增长,但在内存分析工具中强制进行垃圾收集将恢复大量内存。周末监控该应用程序显示该应用程序在轻度使用下正常运行,但今天(星期一)在高峰时段该应用程序再次耗尽内存。我不确定该往哪个方向发展,或者如何了解实际问题是什么。内存分析工具在这方面没有显示任何明显的泄漏或问题,并且可以通过强制垃圾收集来回收内存的事实对我来说似乎很可疑。

4

2 回答 2

2

Kestrel 处理垃圾收集 (GC) 与 IIS 上的 ASPNET 略有不同。Kestrel 能够比 ASPNET 快得多,实现这一壮举的方法之一是降低 GC 压力。这是一篇提供更多详细信息的文章:

https://www.poppastring.com/blog/ASPNETCoreKestrelTheNeedForSpeed.aspx

您可能需要考虑 Kestrel GC 认为的长寿命对象来重写您的代码。没有任何细节我无能为力,但听起来你的对象正在被你的代码释放,并且没有被正常的 GC 过程及时收集。

于 2017-03-20T16:07:30.577 回答
2

不幸的是,看起来实际问题隐藏在我们使用的框架中,特别是依赖注入库无法正确处理瞬态依赖的问题。我们与图书馆的第三方提供商合作,他们在更新的版本中包含了一个修复程序,它 100% 地修复了我们的问题。

于 2017-06-26T16:08:03.760 回答