1

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

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

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

Session.PeakPrivateBytes

4

3 回答 3

2

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

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

希望这可以帮助。

谢谢,-格伦

于 2009-11-13T14:14:26.940 回答
0

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

于 2009-10-22T23:45:45.480 回答
0

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

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

无论如何,这听起来不像是一个问题 - 只是一个好奇的事情。

于 2009-10-22T23:46:00.850 回答