在生产环境中,如何发现哪些Asp.Net http请求,无论是aspx还是asmx或自定义,都会导致w3wp.exe进程中的内存压力最大? 我不是指内存泄漏。这是一个很好的健康应用程序,很好地处理它的所有对象。微软的世代GC确实可行。 但是,有些请求会导致w3wp进程大大增加其内存占用量,但仅限于请求的持续时间。

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

似乎没有任何东西:
HttpContext.Request.PeakPrivateBytes或.CurrentPrivateBytes
或点击 Session.PeakPrivateBytes

有帮助吗?

解决方案

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

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

希望这有帮助。

谢谢, -Glenn

其他提示

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

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

除非你准备对第0,1,2代GC事件等的perf计数器分析进行探索,否则我不会担心解决这个“问题”。

这听起来不像是一个问题 - 只是一个好奇的事情。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top