【发布时间】:2019-05-02 13:53:29
【问题描述】:
我已经追踪这个内存泄漏大约一个月了,但无法弄清楚。该应用程序使用 .NETCore 2.2 在 Azure 中运行,是一个简单的 WebAPI。在我们的开发环境中,我决定编写一个应用程序,它将数千个请求发送到目标应用程序的端点。在凌晨 2:30 之前的 12 小时内,我总共发送了 1,000,000 个请求。这是内存统计数据的样子:
因此,私有字节停留在原来的位置,看起来像是所有的分页内存,一旦程序停止,工作集就会立即下降。我决定在私有字节位于它们所在的位置并且统计数据看起来完全正常时转储内存。转储的大小超过 1.4 GB!但它所显示的结果令人印象深刻:
它显示对象仅使用了 10 MB 内存。这些内存分配在哪里?
有趣的是,如果我最终放手,它会挂起一段时间然后崩溃(“CGI 应用程序遇到错误......”)。句柄计数将突然超过 10,000,然后挂起(2 分钟请求时间,取消请求)然后崩溃并永远关闭,直到有人重新启动它。
我不知道我的下一步应该是什么。我完全不知道是什么导致了这种记忆的积累。 PerfView、dotMemory、Visual Studio 显示托管内存没有任何问题。我在开始和结束时运行差异,没有什么奇怪的。在这一点上有点绝望。
【问题讨论】:
-
The application is running in Azure using .NETCore 2.2 and is a simple WebAPI。使应用程序“更简单”并再次运行测试以查看泄漏是否仍然存在。消除过程可能需要一段时间,但肯定不到 1 个月。 -
我将使用一个简单的 ping 端点启动一个新的 WebAPI,然后从那里开始工作。感谢您的建议。
-
您的调查进展如何?找到问题了吗?
-
没有。这个问题神奇地解决了。我认为这是底层 .netcore 框架的问题,MS 更新了框架以解决该问题。至少可以说非常令人沮丧。
标签: c# azure asp.net-core .net-core asp.net-core-webapi