Обнаружение проблем с процессором W3WP с помощью jetBrains dotTrace - PullRequest
7 голосов
/ 23 сентября 2010

Наш процесс W3WP на нашем производственном сервере постоянно высок. Он не достигает максимума в 100%, но прыгает в 90% с небольшим. Чтобы разобраться в этом, я профилировал живое приложение с помощью JetBrains dotTrace.

Результаты были такими, как ожидалось. Все медленные методы были функциями NHibernate, которые запрашивали нашу базу данных. Мой вопрос заключается в том, не повлияют ли эти медленные методы на процессор нашего веб-сервера, поскольку наш сервер баз данных находится на отдельной машине. Конечно, если сервер базы данных выполняет какую-то работу, то веб-сервер jsut ожидает ответа, и процессор не должен работать?

Если это так, как я могу использовать dotTrace (или другой инструмент в случае необходимости), чтобы определить, где используется ЦП, а не сервер, ожидающий ответа из другого места?

скриншот dotTrace горячих точек alt text

Из скриншота видно, что большую часть времени тратит на ожидание завершения внешних HTTP-запросов. Однако это не должно влиять на использование ЦП на веб-сервере, который я мог бы подумать

1 Ответ

2 голосов
/ 23 сентября 2010

Вполне возможно, что именно NHibernate выполняет тяжелую работу на вашем веб-сервере, а база данных на самом деле делает относительно мало.

Я бы порекомендовал запустить профилировщик SQL, чтобы увидеть, действительно ли база данных занимает много времени за один вызов (из NHibernate).

Я предполагаю, что вы увидите, что NHibernate будет делать много-много звонков в базу данных, а затем обрабатывать их (на сервере эрб-сервера), и именно это отвечает за высокую загрузку ЦП.

Если у вас много ленивых выборок по объединениям, вы можете оказаться в ситуации, когда NHibernate делает много, много вызовов в базу данных, получая данные для одного запроса.

...