Назад | Перейти на главную страницу

Как узнать, что делает w3wp.exe? (или как диагностировать проблему с производительностью)

У меня проблема с производительностью на созданном нами сайте, и я не совсем уверен, как начать ее диагностику.

Краткое описание: У нас очень маленький сайт (http://hearablog.com) с очень небольшим трафиком, на дрянном выделенном сервере процессор всегда очень высок, иногда он остается на 100% в течение нескольких минут, а большую часть его занимает w3wp.exe. Типичный сценарий: w3wp.exe занимает 60%, а SQL Server - около 30%. Наша БД тоже довольно маленькая.

Подробное описание и подробности:

Вот как выглядит монитор ресурсов в одном из этих «спринтов» 100% CPU, на случай, если там есть что-нибудь полезное.

И снимок некоторых счетчиков производительности:

Что меня очень смущает, так это то, что загрузка процессора w3wp настолько высока. На самом деле это не должно делать много ... Так что мои вопросы ...

Большое спасибо.
Даниэль Мальола

Вы также можете использовать пользовательский интерфейс рабочих процессов внутри IIS Manager и проверять запросы, которые в настоящее время выполняются, и видеть, где они застревают, если таковые имеются. Откройте диспетчер IIS-> щелкните сервер в дереве-> дважды щелкните значок рабочих процессов-> дважды щелкните рабочий процесс, который потребляет ЦП, чтобы увидеть выполняющиеся в настоящее время запросы в режиме реального времени, чтобы вы могли видеть, какой модуль требует времени.

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

Хорошо, для начала - сервер ДЕЙСТВИТЕЛЬНО хреновый. Но этого ДОЛЖНО быть достаточно.

  • Для виртуализации проверьте свои драйверы. Я не знаю ни одной платформы вирутализации, которая скрывает ЦП (и я могу сказать, что кто-то ставит Hyper-V или ESX на Celeron), но драйверы для диска и т. Д. Являются показателем.

  • ЦП не должен быть таким высоким. К сожалению, с этой оперативной памятью вы в значительной степени тост - если вы начнете добавлять профилировщик, вы в значительной степени испортите имеющуюся у вас память.

Я буду:

  • Проверьте журналы на предмет выполнения в данный момент.
  • Обновите ОС до 2008 R2 - там доступно ОЧЕНЬ больше информации.

Для тестирования:

  • В своей среде разработки сделайте копию сайта и запустите несколько тестов производительности.
  • Сделайте там профилирование.
  • Используйте отслеживание неудачных запросов, чтобы узнать, какие запросы терпят неудачу.

http://learn.iis.net/page.aspx/266/troubleshooting-failed-requests-using-tracing-in-iis-7/

есть начало там. Это может дать вам подсказку в случае, если проблемы более - хм - "поддаются классификации".

Я бы также вел долгосрочные журналы производительности. Следите за своим вводом-выводом (секунды / чтение, секунды / запись - практически единственные важные из них). Все остальное - слишком расплывчато с точки зрения ввода-вывода - но как только ваш ввод-вывод начинает занимать больше времени, чем следует, диски отстают.

Я бы исключил проблему конфигурации на этом этапе - по крайней мере, в качестве основного индикатора. Что-то израсходовало ваши ресурсы W3p, теперь вам нужно узнать, что это такое.

В общем, это не тот сервер, который мне бы хотелось иметь физический - он такой маленький, ИМХО нет смысла иметь там машину. Виртуальный бы лучше;)

Вы можете попробовать использовать программу под названием Обозреватель процессов для отслеживания отдельных потоков, выполняемых в процессе w3wp. Это должно позволить вам увидеть, какая нить вызывает все повреждения.

Мне очень повезло с использованием средства диагностики отладки Microsoft, чтобы выгрузить мой процесс w3wp, а затем проверить потоки и трассировку стека на предмет блокировок. Он даже скажет вам запрошенную страницу, которая породила поток, который СУПЕР приятно.

http://www.microsoft.com/en-us/download/details.aspx?id=26798

Я согласен с TomTom в дальнейшем, особенно в отношении увеличения пробега от Virtual на данный момент. Локальная отладка / профилирование для сужения проблемы - это правильный шаг.

Я собираюсь надеть шляпу и накидку «Карнак Великолепный» и попросить первый конверт. Ram Rebellion. Что вы получите, если поместите ОС, ASP.NET и жадный SQL Server Express в 1 ГБ.

Я считаю, что ваша проблема в том, что SQL Server Express втягивает всю доступную оперативную память для пула буферов и медленно ее освобождает. Видеть http://support.microsoft.com/kb/321363 Чтобы получить больше информации. Кроме того, IIS имеет кэш по умолчанию 256 МБ, который вам может потребоваться настроить (https://stackoverflow.com/questions/2853135/controlling-asp-net-output-cache-memory-usage). Диагностика отладки - отличный инструмент для решения этой проблемы (ладно, наверное, кувалда).

http://technet.microsoft.com/en-us/library/bb742546.aspx - довольно приличная статья. http://social.technet.microsoft.com/forums/en-US/sharepointadmin/thread/706c653a-16b0-4696-85ee-9ae3552a582e указывает на сошедшую с ума переработку пула приложений как еще одну возможную проблему.

Используйте счетчик Perfmon «Процесс», чтобы увидеть отдельные атрибуты процесса w3wp.exe. Какую часть процессорного времени рабочего процесса занимает ядро? Большое время ядра может указывать на подкачку, но вы говорите, что не уверены. Другие возможности - это драйверы. У рабочего процесса 23 активных потока, и это хорошо, но что они делают? Попробуйте ProcessExplorer SysInternals, чтобы немного покопаться; вы также можете увидеть, какие TCP / IP-соединения используются. Я не использовал SQL Express, но есть ли у него параметры настройки памяти, как у его старшего брата. SQL не хватает памяти IIS, вызывая чрезмерное разбиение на страницы?

Это может быть не полностью связано, но проверьте, используете ли вы NOLOCK в своих запросах. Это может помочь в случае тайм-аутов SQL.