2010-01-12 4 views
50

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

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

У нас есть профайлер ANTS на сервере, но он не проясняется.

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

+0

Вы как-то войти исключений внутри вашего код? Вызвать что-то вроде «Logger.Log (Exception)»? – wtaniguchi

ответ

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

Я просто добавлю к записи то, что в итоге привело нас к источнику проблемы: ** SQL Profiler **. У нас был сложный запрос LINQ to SQL, который включал ссылку на объект в памяти, так что он не смог перевести весь запрос в память и вместо этого уволил буквально тысячи небольших SQL-запросов для выполнения соединения. –

0

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

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

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

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

4

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

+1

Используйте профайлер dotTrace и выберите «Дерево вызовов» в разделе «Все потоки», в котором должны отображаться методы, которые были потрачены на большинство процессоров, сгруппированных в один стек вызовов.Следите за тем, где именно. –

11

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

1

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

4

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

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

-2

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

+4

Не думаю, что я видел Sharepoint, упомянутый здесь. –

0

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

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

0

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

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