生产服务器上给定IIS应用程序池的大量内存使用

时间:2017-01-13 18:01:15

标签: c# asp.net performance iis memory

2天后,我们发布了现有asp.net 2.0应用程序的新版本,现在已转换为4.5。现在我们突然看到这个asp.net应用程序的应用程序池在生产服务器上消耗大量内存,我估计超过30 GB。代码方面,这个应用程序之前没有做过任何事情,或者现在已经添加了这个新版本,它将消耗任何重量,也没有任何文件上传/下载,重度缓存没有。

由于我无法在代码中找到任何可能导致此问题的内容,所以我需要一些可以在服务器上讲述很少细节的分析器。

有没有任何免费或开源工具可以帮助我们找出所有会话数据的详细信息,其中包含存储在此应用程序池的服务器上的大小,以及任何其他有助于了解此特定应用程序池的详细信息带走了这么多记忆。 除了工具,如果有任何其他方向/建议,这将是有帮助的。感谢...

enter image description here

1 个答案:

答案 0 :(得分:4)

这些问题通常可以通过微软免费获得的WinDbg调试工具进行追踪。

首先,您应该创建当前w3wp进程的转储文件。

https://msdn.microsoft.com/en-us/library/d5zhxt22.aspx

之后,您将能够将该进程的当前状态加载到WinDbg中。 https://developer.microsoft.com/en-us/windows/hardware/windows-driver-kit

https://blogs.msdn.microsoft.com/jankrivanek/2012/11/15/setting-up-managed-code-debugging-with-sos-and-sosex/

https://theartofdev.com/windbg-cheat-sheet/

http://windbg.info/

请记住,WinDbg是一种低级工具,因此您需要花一些时间来学习并习惯它。

使用示例:

  1. 通过任务管理器创建进程转储(* .DMP)。位于C:\ Users \ {username} \ AppData \ Local \ Temp文件夹。
  2. 打开WinDbg(x64) - >打开崩溃转储 - >选择已创建的* .DMP
  3. 之后你需要设置符号:

      

    .symfix

         

    .reload

  4. 接下来,您应该加载.net运行时:
      

    .loadby sos clr

         
  5. 如果要使用扩展命令(http://www.stevestechspot.com/

    加载其他模块
      

    .load PathToFile \ sosex.dll

         

    !sosex.help

  6. 现在你已经掌握了一切,你可以开始分析内存堆,线程,锁等......
  7. 你也可以在Tess Ferrandez的博客上找到非常有用的信息,提示和技巧https://blogs.msdn.microsoft.com/tess/tag/debugging/