在ASP.NET Web应用程序中查找内存泄漏

9

我在一个2.53 GHz(2 CPU)和8 GB RAM的WIN SERVER 2008 R2 Enterprise 64位生产服务器(虚拟机)上托管了7个网站。

Web服务器是IIS 7,所有网站都采用.NET Framework 4.0应用程序池。

目前我使用的内存约为8 GB的一半左右,w3wp.exe是消耗最多内存的进程(目前约1.6 GB),其次是sqlservr.exe(1.5 GB)。

我想知道这7个网站中哪个消耗的内存最多,以便我查看。

我尝试过Process Explorer和Resource Monitor,但它们只能显示w3wp.exe使用的内存量,而不能显示单个网站的使用情况。

有没有办法能够精确定位内存占用最高的网站?

3个回答

21

你可以使用微软的Debug Diag工具来进行内存转储。

基本流程如下:

  • 启动DebugDiag
  • 取消向导
  • 点击“进程”选项卡
  • 选择w3wp
  • 右键单击并选择“创建完整转储”
  • 因为你说了“dump”,所以自己偷笑一下
  • 完成转储后(再次偷笑),点击“高级分析”选项卡
  • 使用两个内存压力分析器脚本,看看是否可以看到哪些对象正在使用大量内存。

我建议您结合Uri May的答案来执行此操作,否则您可能会浪费很多时间。


2
您可以为每个网站配置不同的应用程序池,这样您将为托管的7个网站中的每个网站拥有一个 w3wp.exe 进程。之后,您可以使用以下 this link 中的工具通过跟踪具有最大内存消耗的 w3wp.exe 的 PID 来找出哪个网站导致了泄漏。

0
在Windows任务管理器中,您可以通过显示“用户”列来查看每个w3wp.exe正在运行的应用程序池。这是因为每个应用程序池通常都使用自己的用户运行。在Windows 2012服务器中,他们使其有点难以看到 - 您需要先单击“详细信息”选项卡。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接