9

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

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

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

我想做的是知道7个网站中哪个网站消耗的内存最多,这样我就可以看看了。

我试过进程资源管理器和资源监视器,但它只能显示 w3wp.exe 占用了多少 rem,而不能显示单个网站的使用情况。

有没有办法可以确定内存占用者?

4

3 回答 3

20

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

基本流程是:

  • 启动调试诊断
  • 取消向导
  • 单击“进程”选项卡
  • 选择 w3wp
  • 右键单击并选择“创建完整转储”
  • 悄悄地对自己窃笑,因为你说“转储”
  • 转储完成后(再次窃笑),单击“高级分析”选项卡
  • 使用 2 Memory Pressure Analyzer 脚本来查看是否可以看到哪些对象正在使用大量内存。

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

于 2012-10-01T08:38:41.703 回答
2

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

于 2012-10-01T08:38:19.320 回答
0

在 Windows 任务管理器中,您只需显示“用户”列即可查看每个 w3wp.exe 正在运行的应用程序池。这是因为每个应用程序池通常由自己的用户运行。他们让在 Windows 2012 服务器中看到这一点变得有点困难——您需要先单击“详细信息”选项卡。

于 2016-03-05T09:09:33.337 回答