在生产环境中,如何发现哪些Asp.Net http请求,无论是aspx还是asmx或自定义,都会导致w3wp.exe进程中的内存压力最大? 我不是指内存泄漏。这是一个很好的健康应用程序,很好地处理它的所有对象。微软的世代GC确实可行。 但是,有些请求会导致w3wp进程大大增加其内存占用量,但仅限于请求的持续时间。
这只是一个SAAS应用程序的生产环境的成本效率和可扩展性的问题,以便定期向开发部门报告他们占用大部分内存的“页面”,以返回它所属的(内存)压力。 , 可以这么说。
似乎没有类似的东西:
HttpContext.Request.PeakPrivateBytes或.CurrentPrivateBytes
或
Session.PeakPrivateBytes
答案 0 :(得分:2)
您可能希望使用性能监视器等工具来监视W3WP.exe进程的“进程\工作集”并将其记录到数据库中。然后,您可以将其与IIS服务器的HTTP日志相关联。
将Perfmon数据和HTTP日志写入SQL数据库都有帮助。然后,您可以使用T-SQL在观察到的内存压力周围按日期/时间显示请求的页面。使用DatePart函数根据需要将日期/时间四舍五入到所需的秒或分钟精度。
希望这有帮助。
谢谢, -Glenn
答案 1 :(得分:0)
如果您使用的是InProc
会话状态,那么您的所有会话数据都会存储在w3wp的内存中,这可能是其增长的原因。
答案 2 :(得分:0)
我不担心。 可能是GC在请求期间发生,而CLR正在分配内存来移动事物。或者它可能是ASPNET附带的其他一些定期服务。
除非你准备用0,1,2 GC事件等的perf计数器分析进行探索,否则我不会担心解决这个“问题”。
这听起来不像是一个问题 - 只是一个好奇的事情。