W3WP.EXE, использующий 100% CPU - с чего начать?

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

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

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

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


person Herb Caudill    schedule 12.01.2010    source источник
comment
Вы каким-то образом регистрируете исключения внутри своего кода? Вызов чего-то вроде Logger.Log (Exception)?   -  person wtaniguchi    schedule 13.01.2010


Ответы (9)


  1. Стандартные счетчики производительности Windows (ищите другие связанные действия, такие как много запросов GET, чрезмерный сетевой или дисковый ввод-вывод и т. Д.); вы можете читать их как из кода, так и из perfmon (например, для запуска сбора данных, если использование ЦП превышает пороговое значение)
  2. Настраиваемые счетчики производительности (в частности, время для нестандартных запросов и других вызовов, время выполнения которых не определено)
  3. Нагрузочное тестирование с использованием таких инструментов, как Visual Studio Team Test или WCAT.
  4. Если вы можете протестировать или обновить до IIS 7, вы можете настроить отслеживание неудачных запросов, чтобы генерировать трассировку, если запросы занимают больше определенного времени.
  5. Используйте logparser, чтобы узнать, какие запросы поступили во время скачка загрузки ЦП.
  6. Проверки кода / пошаговые инструкции (в частности, ищите циклы, которые могут не завершаться должным образом, например, при возникновении ошибки, а также блокировки и потенциальные проблемы с потоками, такие как использование статики)
  7. Профилирование ЦП и памяти (может быть сложно в производственной системе)
  8. Обозреватель процессов
  9. Монитор ресурсов Windows
  10. Подробный журнал ошибок
  11. Пользовательское ведение журнала трассировки, включая сведения о времени выполнения (возможно, условное, на основе счетчика производительности процессора)
  12. Возникают ли ошибки при перезапуске AppPool? Если так, то это может быть ключом к разгадке.
person RickNZ    schedule 13.01.2010
comment
Я просто добавлю для протокола то, что привело нас к источнику проблемы: SQL Profiler. У нас был сложный запрос LINQ to SQL, который включал ссылку на объект в памяти, так что он не мог перевести весь запрос в память и вместо этого запускал буквально тысячи маленьких запросов SQL для выполнения соединения. - person Herb Caudill; 26.01.2010
comment
исходный код образцы реального мира: 1) счетчики производительности, 2) специальные счетчики производительности, 5) logparser, 7) Профилирование ЦП и памяти, 10) Подробное ведение журнала ошибок < / b>, 11) Пользовательское ведение журнала трассировки? - person Kiquenet; 02.07.2018

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

person Michael Bray    schedule 12.01.2010

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

person user246874    schedule 12.01.2010
comment
Используйте профилировщик dotTrace и выберите «Дерево вызовов по всем потокам», которое должно показать методы, в которых большая часть ресурсов процессора была затрачена, сгруппированными в 1 стек вызовов. Найдите, чтобы узнать, где именно. - person Peter Gfader; 15.01.2010

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

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

person sky100    schedule 13.01.2010
comment
Используете Process Explorer программно? - person Kiquenet; 02.07.2018

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

person RockySanders99    schedule 12.01.2010

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

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

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

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

person braindice    schedule 12.01.2010

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

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

person CShark    schedule 30.12.2016

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

  1. Просто щелкните свой сервер на левой панели IIS.
  2. Щелкните «Рабочие процессы» на главной панели. вы уже видите, какой пул приложений занимает слишком много ЦП.
  3. Дважды щелкните эту строку (в конечном итоге обновите ее, нажав «Показать все»), чтобы увидеть, какие страницы потребляют слишком много процессорного времени (столбец «Прошедшее время») в этом пуле.
person men    schedule 12.09.2017
comment
если я дважды щелкну рабочий процесс, ничего не произойдет. Почему это могло быть? - person Don Cheadle; 24.09.2019

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

person Jeff    schedule 26.10.2012