在生产环境中,如何发现哪些 Asp.Net http 请求(无论是 aspx、asmx 还是自定义)在 w3wp.exe 进程中造成了最大的内存压力?我这里指的不是内存泄漏。它是一个运行良好的应用程序,可以很好地处理所有对象。微软的分代 GC 工作得很好。然而,有些请求会导致 w3wp 进程的内存占用量大幅增加,但仅限于请求的持续时间。
从系统管理员的角度来看,基于 .Net 的 SAAS 应用程序的可扩展性和成本效率,我认为我的问题完全合理。它适合以下一系列类似的问题:
- 哪些非缓存页面响应是可缓存的?
- 哪些页面消耗的 CPU 最多?
- 哪些页面占用的数据库负载最大?
- 哪些页面的呈现时间最长?
- 哪些页面消耗最多的工作进程内存?
有些问题很容易回答,例如,IIS 日志(使用 logparser)可以快速回答哪个需要最长的时间。并且有很多工具可以分析缓存能力。
我想定期向开发部门报告最占用内存的 aspx/ascx/asmx 页面,以便将内存压力返回到其所属的位置。
似乎没有类似的东西:
HttpContext.Request.PeakPrivateBytes 或 .CurrentPrivateBytes 或 Session.PeakPrivateBytes
您的 2 分钱换来 1 分钱……
答案1
请参阅有关以下主题的优秀 MSDN 博客系列:高内存使用率调试。