【问题标题】:Which requests cause a w3wp process to grow considerably?哪些请求会导致 w3wp 进程显着增长?
【发布时间】:2010-12-09 07:11:02
【问题描述】:

在生产环境中,如何发现哪些 Asp.Net http 请求(无论是 aspx、asmx 还是自定义)在 w3wp.exe 进程中造成的内存压力最大? 我的意思不是这里的内存泄漏。这是一个很好的健康应用程序,可以很好地处理它的所有对象。微软的世代 GC 运行良好。 然而,一些请求会导致 w3wp 进程显着增加其内存占用,但仅限于请求期间。

这只是 SAAS 应用程序生产环境的成本效益和可扩展性的问题,以便定期向开发部门报告他们最占用内存的“页面”,以将(内存)压力返回到它所属的位置, 可以这么说。

似乎没有类似的东西:
HttpContext.Request.PeakPrivateBytes 或 .CurrentPrivateBytes

Session.PeakPrivateBytes

【问题讨论】:

    标签: memory multithreading request w3wp


    【解决方案1】:

    您可能希望使用性能监视器之类的工具来监视 W3WP.exe 进程的“进程\工作集”并将其记录到数据库中。然后,您可以将其与 IIS 服务器的 HTTP 日志相关联。

    将 Perfmon 数据和 HTTP 日志都写入 SQL 数据库会有所帮助。然后,您可以使用 T-SQL 在观察到内存压力时按日期/时间显示请求的页面。使用 DatePart 函数构建一个日期/时间,根据需要四舍五入到所需的秒或分钟精度。

    希望这会有所帮助。

    谢谢, -格伦

    【讨论】:

    • 感谢 Glenn,您的建议是迄今为止我收到的唯一认真的回应,我曾在多个 MSDN 论坛和 ServerFault.com 上发布过同样的问题。关于你的建议,这当然是可行的,但也需要大量的工作。在关联数据时我已经看到的一个问题是 IIS HTTP 记录请求的结束时间而不是开始时间。 Tho IIS 7 提供高级日志记录。令我惊讶的是,在这个 SAAS 和 Web 2.0(或者我们现在是 3.0?)的世界中,似乎没有其他人对他们的 Web 应用程序的内存行为如此感兴趣。
    【解决方案2】:

    如果你使用InProc会话状态,你所有的会话数据都存储在w3wp的内存中,并且可能是它增长的原因。

    【讨论】:

    • 确实如此,这是我要衡量的另一件事:每个会话的内存占用量。所以我想要的是...... HttpContext.Request.PeakPrivateBytes Session.PeakPrivateBytes
    【解决方案3】:

    我不会担心的。 可能是在请求期间发生了 GC,而 CLR 正在分配内存以移动事物。或者它可能是 ASPNET 附带的其他一些定期服务。

    除非您准备好对 0、1、2 代 GC 事件等进行性能计数器分析,否则我不会担心解决这个“问题”。

    而且这听起来也不是什么问题——只是好奇而已。

    【讨论】:

    • 对不起,这里没有 kudo。你肯定很快就触发了,但显然还没有理解问题的本质。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多