W3WP.EXE с использованием 100% CPU - с чего начать? - PullRequest
54 голосов
/ 13 января 2010

Веб-приложение ASP.NET, работающее на IIS6, периодически загружает процессор до 100%. Именно W3WP отвечает за почти все использование процессора во время этих эпизодов. Процессор остается на 100% в любом месте от нескольких минут до часа.

Это на промежуточном сервере, и на данный момент сайт получает очень слабый трафик от тестировщиков.

Мы запустили профилировщик ANTS на сервере, но это не очень хорошо.

Где мы можем начать выяснять, что является причиной этих эпизодов и какой код загружает процессор все это время?

Ответы [ 9 ]

36 голосов
/ 13 января 2010
  1. Стандартные счетчики производительности Windows (ищите другие взаимосвязанные действия, такие как множество запросов GET, чрезмерный сетевой или дисковый ввод-вывод и т. Д.); Вы можете читать их как из кода, так и из perfmon (например, для запуска сбора данных, если загрузка процессора превышает пороговое значение)
  2. Пользовательские счетчики производительности (особенно для времени для нестандартных запросов и других вызовов, когда время выполнения не определено)
  3. Нагрузочное тестирование с использованием таких инструментов, как Visual Studio Team Test или WCAT
  4. Если вы можете выполнить тестирование или обновить IIS 7, вы можете настроить отслеживание сбоев запросов, чтобы генерировать трассировку, если запросы занимают более определенное время
  5. Используйте logparser, чтобы увидеть, какие запросы поступили во время пика процессора
  6. Проверки кода / обходы (в частности, ищите циклы, которые могут не завершаться должным образом, например, если произошла ошибка, а также блокировки и потенциальные проблемы с многопоточностью, такие как использование статики)
  7. Профилирование процессора и памяти (может быть затруднено в производственной системе)
  8. Process Explorer
  9. Монитор ресурсов Windows
  10. Подробный журнал ошибок
  11. Настраиваемое ведение журнала трассировки, включая сведения о времени выполнения (возможно, условные, основанные на счетчике перфорации при использовании ЦП)
  12. Ошибки происходят, когда AppPool перезагружается? Если это так, это может быть ключом.
12 голосов
/ 13 января 2010

Это не очень хороший ответ, но вам, возможно, придется пойти в старую школу, сделать снимок изображения процесса IIS и отладить его. Возможно, вы также захотите проверить блог Тесс Феррандез - она ​​- инженер по эскалации **, и ее блог посвящен отладке окон ASP.NET, но этот блог имеет отношение к отладке окон в целом , Если вы выберете тег ASP.NET (на который я ссылаюсь), вы увидите несколько похожих элементов.

4 голосов
/ 13 января 2010

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

Вы также можете попробовать Procdump , чтобы вывести процесс и проанализировать, что на самом деле произошло на процессоре.

4 голосов
/ 13 января 2010

Если ваш процессор достигает 100% и остается там, вполне вероятно, что у вас либо сценарий тупика, либо бесконечный цикл. Профилировщик кажется хорошим выбором для поиска бесконечного цикла. Однако найти тупики гораздо сложнее.

1 голос
/ 13 января 2010

Также посмотрите на ваши счетчики перфмонов. Они могут сказать вам, где много времени уходит на процессор. Вот ссылка на наиболее часто используемые счетчики:

0 голосов
/ 12 сентября 2017

Это очень старый пост, я знаю, но это также распространенная проблема. Все предложенные методы очень хороши, но они всегда будут указывать на процесс, и есть много шансов, что мы уже знаем, что наш сайт создает проблемы, но мы просто хотим знать, какая конкретная страница тратит слишком много времени на обработку. На мой взгляд, наиболее точным и простым инструментом является сам IIS.

  1. Просто нажмите на свой сервер в левой панели IIS.
  2. Нажмите «Рабочие процессы» на главной панели. вы уже видите, какой пул приложений занимает слишком много ресурсов процессора.
  3. Дважды щелкните по этой строке (в конечном итоге обновите, нажав «Показать все»), чтобы увидеть, какие страницы занимают слишком много процессорного времени («Время истекло»). колонка) в этом пуле
0 голосов
/ 30 декабря 2016

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

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

0 голосов
/ 26 октября 2012

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

0 голосов
/ 13 января 2010

У нас было это в рекурсивном запросе, который сбрасывал тонны данных на выход - вы дважды проверили, все ли завершается, и не существует бесконечных циклов?

Возможно, стоит попытаться сузить его одной страницей - мы обнаружили, что ANTS тоже не сильно поможет в этом же случае - то, что мы в итоге сделали, - это запуск сайта, когда страница попадает на страницу просмотра ЦП - на следующую страницу просмотра ЦП - очень методично и требует много времени, но если вы не можете найти его с помощью некоторой трассировки кода, вам может не повезти -

Мы смогли использовать файлы журнала IIS, чтобы отследить его до набора подозрительных страниц -

Надеюсь, это поможет!

...