0

我们有一个 ASP.NET 4.0 Web 应用程序,有 200 多个页面。它有一个公共网站和一个cms。我们已在同一服务器的近 30 个域中安装了此应用程序,因此每个域都安装了该应用程序。

服务器内存(私有工作集)增长缓慢,但它会增长。服务器有 8 GB 的 RAM,但是在一天中的某个时候,我们会收到一条 OutOfMemory 消息,尽管我们每天早上都在回收 AppPool。

它必须有内存泄漏,但我们不知道如何定位这些泄漏。我们试图处理我们可以处理的每一个元素......

我们需要一些帮助。有没有提供这类服务的公司,我的意思是检查应用程序并修复内存泄漏?

谢谢。-

经过一番研究,我发现了很多这样的行:

标签 xLabel = (Label)FormView.FindControl("xLabel")

没有处置。你不认为这会产生巨大的泄漏吗?不会更好:

使用 (Label xLabel = (Label)FormView.FindControl("xLabel")) { Actions }

谢谢

4

2 回答 2

0

New Relic 提供这样的服务:https ://newrelic.com/有一个免费试用版,他们为您的应用程序提供了非常好的分析。

或者要自己执行,您可以查看 MSDN 中的这篇文章:

http://msdn.microsoft.com/en-us/library/ee658248.aspx


'免责声明 - 客户,而不是员工。

于 2012-09-11T10:08:24.183 回答
0

如果您在前一天回收后每天结束,则内存不足,显然有问题。我想如果你有正确的版本,你应该能够弄清楚查看代码或使用 VS.NET 内存分析器。

您还可以查看专业的分析工具,例如Ants,这是一个很好的工具,我发现它在很多场合都很有帮助。

如果您没有可以运行分析器的环境,您可以获得内存转储(使用 DebugDiag 甚至使用任务管理器)并检查(使用 windbg)内存中的对象,这可能会导致您编写错误的代码。如果有人在使用 WinDbg ,这比使用分析工具或在代码库很大的情况下深入研究代码要快得多(因为内存问题是显示障碍)。

顺便说一句,您输入的示例代码 - 当容器被清理时,这些引用应该由 GC 自动清理。如果保存标签本身的容器(视图)没有正确处理,那么它可能是一个问题。问题通常与正在引用且未正确清理的其他对象(大对象)有关。

于 2012-09-27T12:25:50.940 回答