在ASP.NET Web App中查找内存泄漏

时间:2012-10-01 08:34:14

标签: asp.net windows memory-leaks iis-7

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

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

我当前的内存使用量大约是4GB中的4.16 GB,w3wp.exe是消耗大部分内存使用量的进程(目前约为1.6 GB),其次是使用(1.5 GB)的sqlservr.exe。< / p>

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

我已尝试过Process Explorer和资源监视器,但它只能显示w3wp.exe占用多少内容,但不能显示个人网站的使用情况。

有没有办法可以指出内存hogger?

3 个答案:

答案 0 :(得分:20)

您可以使用Microsoft的Debug Diag工具进行内存转储。

基本流程是:

  • 启动DebugDiag
  • 取消向导
  • 点击“处理”标签
  • 选择w3wp
  • 右键单击并选择“创建完整转储”
  • 因为你说“转储”而悄悄地对自己嗤之以鼻。
  • 转储完成后(再次触发),点击“高级分析”标签
  • 使用2 Memory Pressure Analyzer脚本查看您是否可以看到哪些对象占用了大量内存。

我建议结合Uri May的答案这样做,否则你可能会浪费很多时间。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

在Windows任务管理器中,只需显示&#34; user&#34;即可查看哪个应用程序池正在运行每个w3wp.exe。柱。这是因为每个应用程序池通常都使用自己的用户运行。他们在Windows 2012服务器中看到这一点有点困难 - 你需要点击&#34;详细信息&#34;首先是标签。

相关问题