代码之家  ›  专栏  ›  技术社区  ›  Jason

使用大量内存的IIS工作进程?

  •  15
  • Jason  · 技术社区  · 16 年前

    我的服务器上有一个网站,我的IIS工作进程一直在使用4GB RAM。我应该检查什么?

    c:\windows\system32\inetsrv\w3wp.exe
    
    6 回复  |  直到 7 年前
        1
  •  12
  •   Mitch Wheat    7 年前

    我会检查 document 古尔扎提到。

    正如其他海报所指出的,任何实现 IDispose 应该有 Dispose() 完成后调用,最好使用 using 构建。

    起火 perfmon.exe 并添加这些计数器:

    • 进程\专用字节
    • .NET CLR内存所有堆中的字节数
    • 进程\工作集
    • .NET CLR内存\大对象堆大小

    私人字节的增加,而 所有堆计数器中的字节数保持不变表示未托管 内存消耗。

    增加 两个计数器都指示托管内存 消费

        2
  •  5
  •   Gulzar Nazim    16 年前

    请参阅中的“内存瓶颈故障排除”部分。 Tuning .NET Application Performance

        3
  •  1
  •   tvanfosson    16 年前

    如果您有权访问源代码,则可能需要检查是否在内部引用了任何实现IDisposable的对象。 using 陈述或在你完成陈述后被适当地处理。

    Using 是一个C构造,但基本思想是在完成后释放资源。

    要检查的另一件事是将大型对象放入“进程中”会话状态或缓存中。

        4
  •  1
  •   Maxam    16 年前

    更多细节肯定会有所帮助。在应用程序池中运行了多少应用程序?池中是否有ASP.NET应用程序?

    如果您运行的是ASP.NET,请仔细查看会话和缓存变量中存储的内容。使用PerfMon检查正在发生的0、1和2代集合的数量。请注意在会话状态或缓存中存储UI元素,因为这也会阻止收集整个页面实例和页面实例的所有子代。最后,检查是否进行了大量的字符串连接。这会导致大量对象实例化,因为.NET字符串是不可变的。而是使用StringBuilder。

        5
  •  1
  •   jwanagel    16 年前

    创建W3wp进程的小型转储,并使用windbg查看内存中有哪些对象。这就是微软的IIS支持团队在遇到类似问题时所做的。

        6
  •  0
  •   aku    16 年前

    正如其他人指出的,造成这个问题的常见原因是资源泄漏,Win2K3服务器和iis6也存在已知问题。 KB916984

    推荐文章