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

在WIN SERVER 2008 R2 Enterprise 64 Bit上,我在2.53 Ghz(2 CPU)和8 GB内存的单个生产服务器(虚拟)上承载了7个网站。

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

我当前的内存使用量是8GB左右的4.16GB,而w3wp.exe是消耗大部分内存使用量(此时大约为1.6GB),其次是使用(1.5GB)的sqlservr.exe的最多进程。

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

我已经尝试了进程资源pipe理器和资源监视器,但是它只能显示w3wp.exe占用的多less,而不是个别网站的使用情况。

有没有一种方法可以指向内存的老板?

您可以使用Microsoft的“ 调试诊断”工具进行内存转储。

基本过程是:

  • 启动DebugDiag
  • 取消向导
  • 点击“进程”选项卡
  • 选择w3wp
  • 右键单击并选择“创建完整转储”
  • 悄悄地对自己嗤之以鼻,因为你说“倾倒”
  • 一旦转储完成( 再次滑稽 ),点击“高级分析”选项卡
  • 使用2个内存压力分析器脚本查看是否可以看到哪些对象正在使用大量的内存。

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

您可以配置每个网站使用不同的应用程序池,这样你将有一个w3wp.exe进程为您承载的7个网站的每个网站。 之后,您可以使用下面的这个链接中的工具来找出哪个网站造成泄漏通过跟踪w3wp.exe的PID最大的内存消耗。

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