我在生产服务器上运行了一个asp.net应用程序。
服务器上的CPU使用率非常高,为80-90%。
然而,除非cpu达到100%的峰值,否则每个请求似乎都不会花费太长时间。
我需要获取一些分析数据,以确定高CPU使用率是由于少量高CPU请求,还是只是一般高负载。
我可以在机器上添加更多核心,也可以在应用程序中添加web,但我需要证据才能证明任何成本以及未来的性能证明。
是否有办法记录每个页面请求的CPU使用情况?
答案 0 :(得分:6)
实际上,您无法使用计数器直接确定各个请求的CPU利用率。 ASP.NET请求由工作进程处理,其负载分布在所有可用的CPU核心上。您可以测量每个核心或每个进程的CPU利用率,但不能按照请求进行测量。
您可以使用IIS7 Advanced Logging间接隔离需要CPU的请求。您可以从here下载。阅读this blog以了解如何启用自定义日志记录。您需要在日志定义中添加“CPU利用率”字段。新的IIS日志文件将显示每个请求行的CPU利用率。然而,这不是用于请求处理的实际CPU利用率,而只是在请求处理期间的CPU利用率。您仍然可以使用此信息来确定可能会占用大量CPU的可疑请求。
通过负载测试进一步单独测试这些请求,看看它们是否在合理负载下产生过多的CPU使用率。 Microsoft负载测试工具包含在VSTS 2010 Ultimate Edition或VSTS 2008 Test Edition或Team Suite中。或者,您可以使用WCAT - 免费的Microsoft命令行HTTP负载生成器。此外,我们为负载测试开发了一个名为StresStimulus的免费Fiddler扩展,它使用各种负载模式和图表性能指标重放Fiddler会话。
在生产中小心运行负载测试。您可以在理想的负载下运行每个请求几秒钟。如果您无法找到未经优化的页面,请使用此因子来证明硬件升级的合理性。