使用 jetBrains dotTrace 检测 W3WP CPU 问题

发布于 2024-09-24 22:18:14 字数 494 浏览 2 评论 0原文

我们的生产服务器上的 W3WP 进程一直很高。它不会达到 100% 的最大值,但会跳到 90%sa。为了帮助研究这个问题,我使用 JetBrains dotTrace 分析了实时应用程序。

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

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

dotTrace热点截图 alt text

从截图中可以看出,大部分时间都花在等待外部HTTP请求完成上。然而,这些不应该影响我认为的网络服务器上的 CPU 使用率

Our W3WP process on our production server is constantly high. It doesn't max out at 100% but jumps up into the 90%s a fair bit. To help look into this I profiled the live aplication using JetBrains dotTrace.

The results were as expected. All the slow methods were NHibernate functions that queried our database. My question is, would these slow methods actaully affect the CPU on our web server, as our database server is on a separate machine. Surely if the database server is doing some work then the web server jsut waits for a response, and the CPU shouldn't go up?

If this is the case, how do I use dotTrace (or another tool if neccesary) to work out where the CPU is being used as opposed to the server just waiting for a response from elsewhere?

dotTrace screenshot of hot spots
alt text

You can see from the screenshot that most of the time is spend waiting for external HTTP requests to complete. However, these shouldn't affect the CPU usage on the web server I'd have thought

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

晚风撩人 2024-10-01 22:18:14

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

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

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

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

It may well be NHibernate itself that is doing the hard work on your web server, and that the database is actually doing relatively little.

I would recommend running a SQL profiler to see whether it is really the case that the database is taking a long time on a single call (from NHibernate).

My guess is that you will see NHibernate making lots and lots of calls to the database and then processing them (on your erb server server) and that it is this that is responsible for the high CPU.

If you have a lot of lazy fetching on joins, you can end up in the situation where NHibernate makes many, many calls to the database get the data for one request.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文