W3WP.EXE с использованием 100% CPU - с чего начать?
Веб-приложение ASP.NET, работающее на IIS6, периодически загружает процессор до 100%. Именно W3WP отвечает за почти все использование процессора в этих эпизодах. Процессор остается на 100% в любом месте от нескольких минут до часа.
Это на промежуточном сервере, и на данный момент сайт получает очень слабый трафик от тестировщиков.
Мы запустили профилировщик ANTS на сервере, но это не очень хорошо.
Где мы можем начать выяснять, что является причиной этих эпизодов и какой код загружает процессор все это время?
9 ответов
- Стандартные счетчики производительности Windows (ищите другие взаимосвязанные действия, такие как множество запросов GET, чрезмерный сетевой или дисковый ввод-вывод и т. Д.); Вы можете читать их как из кода, так и из perfmon (например, для запуска сбора данных, если загрузка процессора превышает пороговое значение)
- Пользовательские счетчики производительности (особенно для времени для нестандартных запросов и других вызовов, когда время выполнения не определено)
- Нагрузочное тестирование с использованием таких инструментов, как Visual Studio Team Test или WCAT
- Если вы можете выполнить тестирование или обновить IIS 7, вы можете настроить отслеживание сбоев запросов, чтобы генерировать трассировку, если запросы занимают больше определенного времени
- Используйте logparser, чтобы увидеть, какие запросы поступили во время пика процессора
- Обзоры кода / обходы (в частности, ищите циклы, которые могут не завершиться должным образом, например, если произошла ошибка, а также блокировки и потенциальные проблемы с многопоточностью, такие как использование статики)
- Профилирование процессора и памяти (может быть затруднено в производственной системе)
- Process Explorer
- Монитор ресурсов Windows
- Подробная регистрация ошибок
- Настраиваемое ведение журнала трассировки, включая сведения о времени выполнения (возможно, условное, на основе счетчика производительности процессора)
- Ошибки происходят, когда AppPool перезагружается? Если это так, это может быть ключом.
Это не очень хороший ответ, но вам, возможно, придется пойти в старую школу, сделать снимок образа процесса IIS и отладить его. Возможно, вам также захочется заглянуть в блог Тесс Феррандез - она - инженер по эскалации **, и ее блог посвящен отладке окон ASP.NET, но этот блог имеет отношение к отладке окон в целом. Если вы выберете тег ASP.NET (на который я ссылаюсь), вы увидите несколько похожих элементов.
Если ваш процессор достигает 100% и остается там, вполне вероятно, что у вас либо сценарий тупика, либо бесконечный цикл. Профилировщик кажется хорошим выбором для поиска бесконечного цикла. Однако тупики гораздо сложнее отследить.
Process Explorer - отличный инструмент для устранения неполадок. Вы можете попробовать это для нахождения проблемы высокой загрузки ЦП. Это дает вам представление о том, как работает ваше приложение.
Вы также можете попробовать Procdump для выгрузки процесса и анализа того, что действительно произошло на процессоре.
Также посмотрите на ваши счетчики перфмонов. Они могут сказать вам, где много времени уходит на процессор. Вот ссылка на наиболее часто используемые счетчики:
У нас это было в рекурсивном запросе, который выводил тонны данных на выход - вы дважды проверили, все ли завершается, и не существует бесконечных циклов?
Можно попытаться сузить его с помощью одной страницы - мы обнаружили, что ANTS тоже не сильно поможет в этом же случае - то, что мы в итоге сделали, - это запуск сайта, просмотр страницы ЦП - переход на следующую страницу, просмотр ЦП - очень методично и много времени, но если вы не можете найти его с помощью некоторой трассировки кода, вам может не повезти -
Мы смогли использовать файлы журналов IIS, чтобы отследить его до набора подозрительных страниц -
Надеюсь, это поможет!
В лучшем случае это предположение, но, возможно, ваша команда разработчиков строит и развертывает приложение в режиме отладки вместо режима выпуска. Это приведет к появлению файлов.pdb. Это означает, что ваше приложение будет использовать дополнительные ресурсы для сбора информации о состоянии системы и отладки во время работы вашей системы, что приведет к большей загрузке процессора.
Таким образом, было бы достаточно просто убедиться, что они собираются и развертываются в режиме выпуска.
Это очень старый пост, я знаю, но это также распространенная проблема. Все предложенные методы очень хороши, но они всегда будут указывать на процесс, и есть много шансов, что мы уже знаем, что наш сайт создает проблемы, но мы просто хотим знать, какая конкретная страница тратит слишком много времени на обработку. Самым точным и простым инструментом, на мой взгляд, является сам IIS.
- Просто нажмите на свой сервер в левой панели IIS.
- Нажмите "Рабочие процессы" на главной панели. вы уже видите, какой пул приложений занимает слишком много ресурсов процессора.
- Дважды щелкните по этой строке (в конечном итоге обновите, нажав "Показать все"), чтобы увидеть, какие страницы занимают слишком много процессорного времени (столбец "Время истекло") в этом пуле.
Если вы идентифицируете страницу, для загрузки которой требуется время, используйте инструментальную панель разработчика SharePoint, чтобы узнать, какой компонент требует времени.