4

我看到我的 ASP.NET Web 应用程序的 CPU 使用率一直很高(仅在现场制作机器上,自然......!)我正在尝试缩小原因 - 它基本上是四核 Xeon 机器的最大使用率它不可能做到这一点!

Web 进程的 CPU 使用率通常高于 DB 进程的 CPU 使用率——它自己给我敲响了警钟(?)。

但是,使用标准分析工具(dotTrace、Red Gate 等)只会显示在单个方法上花费的时间(而不是实际的 CPU 使用率) - 最终仍然会突出显示受 DB 限制的方法。虽然这可能表明缓存或更好的索引的机会,但我看不出这本身会如何导致 Web 应用程序进程的 CPU 使用率很高?

关于如何缩小范围的任何建议或提示?

谢谢!

4

4 回答 4

3

一些建议首先尝试。

1.Deploy with Release Build 检查部署的产品是否处于发布模式。通过在调试模式下运行,大量时间被浪费在加载 pdb 和程序集上。

2.Disable ViewState 如果不需要,禁用视图状态。ViewState 只不过是存储在隐藏字段中以在请求之间持久化的数据。它在服务和请求时都会增加页面的总有效负载。当序列化或反序列化回发到服务器的视图状态数据时,还会产生额外的开销。最后,视图状态增加了服务器上的内存分配。

3.禁用会话状态:

如果您不打算使用它,请禁用会话状态。默认情况下它是打开的。您实际上可以为特定页面或整个应用程序关闭此功能。

有一些基本的 ASP.NET 应用程序性能监控,查看这两篇 MSDN 文章 “监控 ASP.NET 应用程序性能”Performance Counters for ASP.NET

于 2009-07-22T17:08:20.913 回答
0

您能否设置一些单元测试来调用各种方法并查看它们对处理器使用的影响?如果您使用的是 Team System,Visual Studio 会内置一些测试工具,但即使您不是,您也可以编写一个多线程测试器来调用特定函数数百次。

如果您想要一些有关如何执行此操作的指示,我可以帮助您构建一些基本的单元测试。

于 2009-07-19T22:21:02.120 回答
0

您是否正在记录/报告未处理的异常?如果不这样做并检查它们中的任何一个是否与您的高 CPD 尖峰相对应,您可能有堆栈溢出导致尖峰。

http://msdn.microsoft.com/en-us/library/ms998306.aspx

您还可以考虑使用 HttpModule 重新编码每个请求的时间,并检查哪些请求占用的时间最多,这可能表明导致问题的页面。

于 2009-07-27T00:10:47.640 回答
0

正如 Pradeepno 所指出的,首先要从性能计数器着手——它们可以让您很好地了解消耗 CPU 的哪一部分。

Web 应用程序使用率高于 DB 使用率并不完全令人惊讶。如果您有不错的数据库设计,那么大多数 Web 应用程序几乎不会导致功能强大的数据库服务器出汗。

于 2009-07-27T00:34:39.377 回答