使用jetBrains dotTrace检测W3WP CPU问题

Rob*_*ton 7 asp.net iis nhibernate performance dottrace

我们在生产服务器上的W3WP流程一直很高.它不会达到100%,但会跳到90%的公平位.为了帮助调查这一点,我使用JetBrains dotTrace描述了实时应用程序.

结果如预期.所有慢速方法都是查询数据库的NHibernate函数.我的问题是,这些慢速方法是否会对我们的Web服务器上的CPU产生影响,因为我们的数据库服务器位于单独的计算机上.当然,如果数据库服务器正在做一些工作,那么Web服务器jsut等待响应,CPU不应该上升?

如果是这种情况,我如何使用dotTrace(或其他工具,如果需要)来计算CPU的使用位置,而不是等待来自其他地方的响应的服务器?

dotTrace热点截图 替代文字

您可以从屏幕截图中看到,大部分时间都花在等待外部HTTP请求完成上.但是,这些不应该影响我想到的Web服务器上的CPU使用率

Rob*_*ine 2

很可能是 NHibernate 本身在您的 Web 服务器上完成了艰苦的工作,而数据库实际上所做的工作相对较少。

我建议运行 SQL 分析器来查看数据库是否确实在一次调用(来自 NHibernate)上花费了很长时间。

我的猜测是,您将看到 NHibernate 对数据库进行大量调用,然后处理它们(在您的 erb 服务器上),而这正是造成 CPU 占用率过高的原因。

如果您在连接上有大量的惰性获取,那么您最终可能会遇到这样的情况:NHibernate 对数据库进行多次调用来获取一个请求的数据。