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

42

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

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

Длинное описание и более подробная информация:

  • Сайт размещен на очень дрянном сервере Cari.Net. С самого начала у нас было ощущение, что сервер работает не совсем корректно, например, некоторые вещи могут занять слишком много времени, так что это может быть проблемой конфигурации с самого начала. Это может быть также , что мы получаем виртуальный сервер , в то время как мы должны иметь специальную один, хотя у нас нет никаких доказательств того, что бы указать на это, за исключением того , что сервер имеет тенденцию быть довольно медленным , за исключение.

  • Сервер 64-разрядный Windows 2008 Standard, с SQL 2008 Express

  • Аппаратное обеспечение - Celeron 2,80 ГГц, 1 ГБ ОЗУ

  • Сайт разработан в ASP.Net MVC с использованием Entity Framework для доступа к данным.

  • Теперь, это довольно дрянное оборудование, но у меня были другие серверы с этими парнями, с эквивалентным (или хуже) HW, и производительность намного лучше, чем этот. Тем не менее, другие серверы имеют W2003 и SQL2005, и я использую ASP.Net "WebForms" 2.0, без MVC, без LINQ, без EF; так что я не уверен, что переход на 2008 год / другие вещи означает большой спад производительности.

  • Я регулярно обслуживаю файлы MP3 (5-20 Мб), что является немного необычной загрузкой, может быть, это вызывает какие-то проблемы?
    Приведет ли это к тому, что w3wp будет использовать много процессора?

  • Использование диска кажется очень низким. Память обычно составляет около 90%, но использование диска, кажется, указывает на то, что она не сильно страничит.

  • Я получаю тонны электронных писем каждый день о тайм-аутах SQL, для запросов, занимающих более 30 секунд, хотя все наши запросы довольно просты (или должны быть, но EF может облажаться).

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

альтернативный текст

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

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

  • Есть ли способ узнать "что" он делает? Может быть, даже профиль это?
  • Какие счетчики производительности я должен смотреть?
  • Можно ли этого ожидать при данной аппаратной / программной конфигурации?
  • Это может быть вызвано какой-то ошибкой конфигурации, с чего бы вы начали искать?

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

Даниэль Маглиола
источник

Ответы:

42

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

Также рассмотрите возможность использования Failed Request Tracing, чтобы отслеживать время, затрачиваемое на каждый запрос, и видеть, где оно выполняется.

Карлос Агилар Марес
источник
2
Это многообещающе, на самом деле это звучит как ТОЧНО то, что я хочу видеть, но на самом деле эти экраны отображаются пустыми. По-видимому, он показывает только те запросы, которые занимают больше секунды, в соответствии с большой надписью сверху, и ни один из наших запросов не является очевидным, потому что список пуст. Любые идеи о том, как заставить его показать больше запросов? Как опустить фильтр 1с? Благодарность!
Даниэль Маглиола
1
Вы можете ввести 0 в фильтре и щелкнуть Go, чтобы установить его на 0 секунд. Кроме того, вы можете запускать из командной строки с повышенными привилегиями «% windir% \ system32 \ inetsrv \ appcmd.exe список запросов»
Карлос Агилар Марес
1
Большое спасибо, Карлос! Это то, что я в итоге сделал, чтобы найти один запрос (у нас есть хрон), который убивал мой сервер каждые 5 минут (для его запуска потребовалось 3,5 минуты, поэтому он почти постоянно работал на 100% ЦП). Благодарность!!!
Даниэль Маглиола
1
Этот пользовательский интерфейс сказал мне, какой URL был доступен; к сожалению, это POST для веб-службы asmx, и эти данные недоступны. (headbang)
Росс Прессер
5

Хорошо, для начала - сервер действительно дрянной. Но этого ДОЛЖНО быть достаточно.

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

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

Я мог бы:

  • Проверьте журналы для материала, выполняющегося в данный момент.
  • Обновите операционную систему до 2008 R2 - гораздо больше информации доступно там.

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

  • В вашей среде разработки сделайте копию сайта и запустите несколько тестов производительности.
  • Делай профилирование там.
  • Используйте функцию Failed REquest Tracking, чтобы узнать, какие запросы не выполняются.

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

есть начало там. Это может дать вам подсказку на случай, если проблемы будут более «хм» «категорируемыми».

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

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

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

TomTom
источник
Большое спасибо за ответ. некоторые вопросы: Какие журналы вы бы проверили на предмет выполнения в данный момент? (извините, если это вопрос новичка) - Обновление ОС: Мы могли бы попробовать это, но я боюсь, что это может сломать вещи, может быть, насколько это безопасно? - Среда разработки: проблема в том, что в моей среде разработки она работает нормально. Процессор незначителен, запросы не сбои и т. Д.
Даниэль Маглиола
Что касается журналов ввода / вывода: я только что добавил счетчики, о которых вы упомянули, и все они равны 0, когда процессор высок. Я только что добавил скриншот некоторых счетчиков производительности, на которые смотрю. Я знаю, что снимок не рассказывает всей истории, но эти значения, как правило, довольно стабильны. Как вы думаете, количество текущих соединений (которые я не могу объяснить) может быть проблемой? Любые идеи о том, как выяснить, что эти соединения запрашивают / делают? Какие другие счетчики, по вашему мнению, могут быть полезны для диагностики чего-то подобного?
Даниэль Маглиола
Ну, R2 вполне безопасен. Я обновил все и никогда не получал проблемы. Во всяком случае .... это проблема процессора, и это может быть ужасно, особенно если учесть, что у вас недостаточно оперативной памяти для установки профилировщика. Я бы на самом деле попытался полностью переустановить. Да, отстой, но это означает, что вы можете установить R2 заново и посмотреть, сохраняется ли проблема. Плохо то, что у вас нет резервной системы, поэтому вы не можете определить, является ли проблема «локальной» или более общей. Альтернативно: остановите IIS, сотрите все временные папки, которые также используются
TomTom,
для компиляции и посмотреть, что произойдет, когда вы перезапустите. С R2 вы могли видеть, если / какие файлы остаются открытыми IIS. Это локально для одного веб-приложения или также, если все веб-сайты остановлены? Следующая вещь, которую стоит попробовать - отключить все сайты и выяснить, какой из них ломает.
TomTom
Наконец, проблема с виртуальными серверами заключается в том, что, как я обнаружил, мы в конечном итоге платим больше или одинаково за одно и то же оборудование, плюс счет за пропускную способность является убийственным (имейте в виду, что мы обслуживаем аудиофайлы). Мы перейдем к большему серверу, если потребуется, но, честно говоря, с трафиком, который у нас есть, должны быть некоторые проблемы, мы никогда не должны использовать 100% CPU ..
Даниэль Маглиола,
4

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

Джо Филлипс
источник
3

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

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

jocull
источник
1

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

Я собираюсь надеть мою шляпу и плащ Karnak The Великолепный и попросить первый конверт. Рэм Восстание. Что вы получаете, когда вы помещаете ОС, 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 указывает на то, что утилизация пулов приложений сошла с ума как еще одна возможная проблема.

Ларри Смитмиер
источник
1

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

Саймон Кэтлин
источник
Давайте посмотрим, правильно ли я это делаю ... Я добавил счетчики% времени процессора и% времени пользователя, оба для процесса w3wp, и они оба постоянно совпадают друг с другом. Означает ли это, что времени ядра нет, или я смотрю на это неправильно? (извините, я новичок в этом)
Даниэль Маглиола
0

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

Родриго Хан
источник