W3WP.EXE с использованием 100% CPU - с чего начать?

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

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

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

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

9 ответов

Решение
  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 перезагружается? Если это так, это может быть ключом.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам