Поделиться через


Устранение неполадок с высоким уровнем ЦП в пуле приложений IIS

Применимо к: службы Интернет-информационных служб (IIS)

Это средство устранения неполадок помогает определить причину постоянно повышенной нагрузки процессора в пуле приложений Служб IIS. Использование ЦП обычно увеличивается, когда веб-приложение обслуживает запросы. Однако если вы постоянно видите, что ЦП остается на высоком уровне (80 процентов или больше) в течение длительных периодов, производительность приложения страдает. Поэтому важно понимать причину устойчивого высокого ЦП, чтобы устранить проблему.

Сценарий

Пул приложений в IIS имеет длительный период высокой загрузки ЦП, превышающий 80 процентов использования. При тестировании приложения вы не столкнулись с проблемами. Затем приложение испытывает фактическую нагрузку пользователя, и ЦП поднимается на высокий процент и остается там. Чтобы восстановить, необходимо перезапустить пул приложений. Тем не менее, ЦП снова поднимается на высокий уровень после перезапуска.

Средства диагностики

Сбор данных

При возникновении проблем с высоким потреблением ЦП сначала определите процесс, который потребляет большую часть ЦП. Используйте вкладку "Процессы " в диспетчере задач, чтобы найти эти сведения. Убедитесь, что установлен флажок "Показать процессы всех пользователей". На следующем снимке экрана показан этот флажок и видно, что w3wp.exe процесс (процесс, который хранит пул приложений IIS) использует высокую загрузку ЦП.

Диспетчер задач Windows показывает столбец C P U, в котором цифра 85 выделена в строке исполняемого файла w 3 w p. Выбран параметр

Вы также можете использовать монитор производительности для определения того, какой процесс использует большую часть ЦП. Дополнительные сведения об использовании монитора производительности см. в статье "Анализ данных о производительности".

Совет

Чтобы определить, какой пул приложений связан с определенным w3wp.exe процессом, откройте окно командной строки администратора, переключитесь в %windir%\System32\inetsrv папку (cd %windir%\System32\inetsrv), а затем запустите appcmd list wp. Эта команда показывает идентификатор процесса (PID) w3wp.exe процесса в кавычках. Этот идентификатор можно сопоставить с идентификатором PID, доступным в диспетчере задач.

Убедившись, что w3wp.exe процесс испытывает высокий уровень ЦП, определите причину проблемы, собирая следующие сведения:

Замечание

Как правило, трассировка ETW не влияет на производительность. Эта функция полезна в рабочих сценариях, в которых производительность сервера должна поддерживаться во время сбора журналов. Для сравнения, потоки приостанавливаются во время сбора файлов дампа памяти. Таким образом, производительность сервера может снизиться во время сбора файлов дампа.

Трассировка ETW содержит детальную информацию, относящуюся к потреблению ЦП с течением времени. Однако трассировка ETW не предоставляет подробное представление объектов, их значений и корней, предоставляемых файлом дампа памяти. Таким образом, трассировка ETW наиболее полезна для сценариев, в которых загрузка ЦП высока, но потребление памяти нормально.

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

  • Сбор нескольких трассировок или файлов дампа (три обычно достаточно).
  • Сбор трассировок или файлов дампа из того же идентификатора процесса.
  • Соберите трассировки или файлы дампа с интервалом в 10 секунд, чтобы свести к минимуму время между ними. (Этот метод помогает убедиться, что те же потоки по-прежнему живы в каждом файле трассировки или дампа, чтобы лучше определить, какие потоки используют больше всего ЦП.)
  • Сбор файлов дампа при высокой или ненормальной загрузке w3wp.exe ЦП, а не только при высокой общей загрузке ЦП сервера.

Соберите набор сборщиков данных для монитора производительности

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

Вы можете просматривать данные Perfmon в режиме реального времени или собирать их в наборе сборщиков данных для последующей проверки. Требуется комплект сбора данных для устранения проблемы высокой загрузки ЦП. Чтобы создать набор, выполните следующие действия.

  1. На панели управления откройте средства администрирования.
  2. Дважды щелкните монитор производительности.
  3. Разверните узел наборы сборщиков данных.
  4. Щелкните правой кнопкой мыши определяемый пользователем и выберите новый>набор сборщика данных.
  5. Назовите набор сборщика данных High CPU.
  6. Выберите "Создать вручную" (дополнительно).
  7. Выберите Далее.
  8. Выберите "Создать журналы данных".
  9. Установите флажок счетчика производительности.
  10. Выберите Далее.
  11. Выберите Добавить. Если приложение не является ASP.NET приложением, перейдите к шагу 19.
  12. Прокрутите страницу до верхней части списка счетчиков и выберите память .NET CLR.
  13. В списке экземпляров выберите <все экземпляры>.
  14. Чтобы добавить счетчики в список добавленных счетчиков, нажмите кнопку "Добавить".
  15. Выберите ASP.NET из списка счетчиков и нажмите кнопку "Добавить".
  16. В списке счетчиков выберите ASP.NET Приложения.
  17. В списке экземпляров выберите <все экземпляры>.
  18. Выберите Добавить.
  19. В списке счетчиков разверните Process. (Убедитесь, что вы расширяете процесс, а не процессор.)
  20. В объекте Process выберите % время процессора.
  21. В списке экземпляров выберите <все экземпляры>.
  22. Выберите Добавить.
  23. В списке счетчиков разверните Поток.
  24. В объекте Thread выберите % время процессора.
  25. В списке экземпляров выберите <все экземпляры>.
  26. Выберите Добавить.
  27. В списке экземпляров выберите ID Thread.
  28. Выберите Добавить.

Диалоговое окно должно выглядеть следующим образом.

Диалоговое окно свойств

Нажмите кнопку "ОК>далее". Обратите внимание, где сохраняется набор сборщиков данных. (Это расположение можно изменить, если вам нужно.) Затем нажмите кнопку "Готово".

Набор сборщиков данных еще не запущен. Чтобы запустить его, перейдите к узлу Пользовательские настройки, найдите Высокая загрузка ЦП и щелкните по ней правой кнопкой мыши, а затем выберите Пуск в меню.

Сбор файла дампа памяти пользовательского режима с помощью Debug Diagnostics

Самый простой способ сбора файлов дампа процесса в режиме пользователя при возникновении высокого состояния ЦП — использовать диагностику отладки.

Скачайте DebugDiag, установите и запустите его на сервере. При запуске DebugDiag средство отображает диалоговое окно "Выбор типа правила ". Чтобы создать правило сбоя для пула приложений, выполните следующие действия.

  1. Выберите Производительность>Далее.
  2. Выберите Счетчики производительности>Далее.
  3. Выберите " Добавить триггеры perf".
  4. Разверните объект Processor (а не процесс), а затем выберите % Процессорного времени.
  5. В списке экземпляров выберите _Total.
  6. Нажмите кнопку "Добавить>ОК".
  7. Выберите только что добавленный триггер и выберите пункт "Изменить пороговые значения". Диалоговое окно
  8. В раскрывающемся списке выберите "Выше".
  9. Измените пороговое значение на 80.
  10. Введите 20 как число секунд. (Если это необходимо, можно изменить это значение. Но чтобы предотвратить ложные триггеры, не следует указывать небольшое количество секунд.)
  11. Нажмите кнопку ОК.
  12. Выберите Далее.
  13. Выберите Добавить целевой дамп.
  14. В раскрывающемся списке выберите пул веб-приложений.
  15. В списке пулов приложений выберите пул приложений.
  16. Нажмите кнопку ОК.
  17. Нажмите кнопку "Далее " два раза.
  18. Введите имя правила, если хотите, и запишите расположение, в котором нужно сохранить файлы дампа. Это расположение можно изменить позже.
  19. Выберите Далее.
  20. Нажмите кнопку "Активировать правило сейчас", а затем нажмите кнопку "Готово".

Совет

Файлы дампа нескольких пулов приложений можно создать, добавив несколько целевых объектов дампа. Используйте тот же метод, который использовался в шагах 13-15.

Это правило создает 11 файлов дампа. Первые 10 — это "мини-дампы". Окончательный файл дампа имеет полную память и гораздо больше.

После возникновения проблемы с высокой загрузкой ЦП остановите набор сборщиков данных Perfmon, чтобы он больше не собирал данные. Чтобы остановить коллекцию, щелкните правой кнопкой мыши набор сборщика данных высокого уровня ЦП , который указан в узле , определяемом пользователем , и нажмите кнопку "Остановить".

Сбор трассировок ETW с помощью PerfView

  1. Скачайте PerfView и запустите его от имени администратора.
  2. Выберите Собрать>Собрать.
  3. Установите флажки Zip, Слияние и Время потока.
  4. Разверните дополнительные параметры и установите флажок IIS .
  5. Выберите "Начать коллекцию". PerfView начинает сбор данных.
  6. После завершения работы PerfView нажмите кнопку "Остановить коллекцию".

PerfView объединяет несколько ETL-файлов в .zip-файл и сохраняет его в той же папке, что и PerfView.exe. Сжатый файл будет предоставлен для анализа.

Анализ данных

После события высокой загрузки ЦП у вас есть два набора данных для проверки: набор сборщика данных Perfmon и файлы дампа памяти. Начните с просмотра данных Perfmon.

Анализ данных о производительности

Чтобы просмотреть данные Perfmon для вашей проблемы, щелкните правой кнопкой мыши набор сборщика данных с высоким уровнем ЦП , который указан в определяемом пользователем узле, а затем выберите последний отчет. Отчет похож на следующий снимок экрана.

Окно монитора производительности.

Удалите все текущие счетчики, чтобы можно было добавить явные, которые требуется проверить. Выберите первый счетчик в списке, нажмите и удерживайте клавишу SHIFT, прокрутите внизу списка, выберите последний счетчик и нажмите клавишу DELETE.

Теперь добавьте / счетчик времени обработки% процессора. Выполните следующие действия:

  1. Щелкните правой кнопкой мыши в правой области Perfmon и выберите "Добавить счетчики".
  2. Разверните объект Process.
  3. В списке выберите % Время процессора.
  4. В списке экземпляров выберите< все экземпляры>.
  5. Выберите Добавить.
  6. Нажмите кнопку ОК.

Теперь отображается график времени процессора, который использовался каждым процессом на компьютере во время запуска набора сборщиков данных. Самый простой способ изолировать процесс, используемый на самом высоком уровне ЦП, — включить функцию выделения Perfmon. Выберите первый счетчик в списке и нажмите клавиши CTRL+H. Выбранный процесс отображается как полужирная черная линия на графе.

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

В окне Монитора производительности показано использование Ц П У выполняемым файлом W 3 w p.

Совет

Perfmon помогает определить проблемы с производительностью в приложении. Данные, собранные в журнале Perfmon, указывают, сколько запросов выполняется (с помощью объектов ASP.NET и ASP.NET Приложений). Кроме того, оно может показать вам другие важные данные о том, как ваше приложение работает.

Чтобы определить причину проблемы с высоким ЦП, просмотрите файлы дампа, созданные с помощью DebugDiag.

Анализ дампов с помощью DebugDiag

DebugDiag может распознавать множество проблем, выполняя автоматический анализ файлов дампа. Для этой проблемы анализаторы производительности DebugDiag помогают определить первопричину высокого ЦП. Чтобы использовать анализатор, выполните следующие действия.

  1. Выберите вкладку "Расширенный анализ" в DebugDiag.
  2. Выберите Анализатор производительности.
  3. Выберите Добавить файлы данных.
  4. Перейдите в расположение, в котором были созданы файлы дампа. По умолчанию это будет вложенная папка папки C:\Program Files\DebugDiag\Logs .
  5. Выберите один из файлов дампа, а затем нажмите клавиши CTRL+A, чтобы выбрать все файлы в этой папке.
  6. Выберите Открыть.
  7. Выберите Начало анализа.

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

Окно Internet Explorer, отображающее отчет об анализе отладочной диагностики.

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

Страница

В этом примере выполняется страница default.aspx в приложении FastApp. Если вы посмотрите дальше по стеку вызовов (в нижней части страницы), вы увидите, что этот поток выполняет объединение строк. (Обратите внимание на вызов System.String.Concat в стеке вызовов.) При анализе других основных потоков ЦП вы увидите тот же шаблон.

Следующим шагом является проверка Page_Load события на странице default.aspx приложения FastApp. Там вы найдете следующий код:

htmlTable += "<table>";
for (int x = 0; x < 5000; x++)
{
htmlTable += "<tr>" + "<td>" + "Cell A" + x.ToString() + "</td>";
    htmlTable += "<td>" + "Cell B" + x.ToString() + "</td>" + "</tr>";
}
htmlTable += "</table>";

Такой код приводит к высокой загрузке ЦП.

Анализ трассировок ETW, собираемых PerfView

Трассировки ETW, собираемые с помощью PerfView, в основном полезны при обращении в службу поддержки Майкрософт для получения дополнительной помощи. Подготовите файл трассировки ETW при открытии обращения в службу поддержки, чтобы помочь инженерам службы поддержки Майкрософт анализировать шаблоны потребления ЦП с течением времени и быстрее определить первопричину.

Дополнительные сведения об анализе трассировок ETW см. в руководстве по PerfView: простой анализ производительности ЦП.

Заключение

С помощью Perfmon, DebugDiag и PerfView можно легко собирать данные, чтобы определить причину высокой загрузки ЦП в пулах приложений. Если вы не можете найти первопричину с помощью этих методов, обратитесь в службу поддержки Майкрософт для получения дополнительной помощи. Имея данные Perfmon и файлы дампа готовы при открытии дела, вы можете значительно сократить время, необходимое для инженеров поддержки Майкрософт, чтобы помочь вам.

Другие ресурсы

Отказ от ответственности за контакт с третьими лицами

Microsoft предоставляет контактную информацию сторонних организаций, чтобы помочь вам найти дополнительную информацию по этой теме. Эти контактные данные могут изменяться без уведомления. Корпорация Майкрософт не гарантирует точность сторонних контактных данных.