2012-10-01 30 views
8

我主持7个单一的生产服务器上的网站(虚拟)在2.53千兆赫(2个CPU)和对WIN SERVER 2008 R2企业版64位RAM 8GB。查找内存泄漏在ASP.NET Web应用程序

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

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

我想要做的是要知道哪些网站出7消耗最多的内存,这样我可以去看看。

我试过进程资源管理器和资源监视器,但它只能显示多少REM采取的w3wp.exe而不是个人网站的使用。

有没有一种方法可以将指针指向内存管理器?

回答

2

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

20

你可以使用微软的Debug Diag工具做一个内存转储。

基本过程是:

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

我会建议与Uri May的答案结合使用,否则您可能会浪费大量时间。

0

在Windows任务管理器,你可以看到哪些应用程序池正在运行的每个通过显示“用户”栏简单地W3WP.EXE。这是因为每个应用程序池通常都以自己的用户运行。他们在Windows 2012服务器中看到这一点更难 - 您需要先点击“详细信息”选项卡。