Подтвердить что ты не робот

Как предотвратить использование ЦП на 100% из-за рабочего процесса в iis

Использование моего процессора на 100% больше времени в Windows Server 2008 R2 с помощью моего собственного vps, vmware, четырехъядерного ядра и 4 ГБ памяти. Когда я открываю диспетчер задач Windows и перехожу к монитору ресурсов, я вижу, что 100% использование происходит из-за workerprocess.exe. У меня есть 3 веб-сайта в моем IIS.

  • Как я могу определить, какой веб-сайт вызывает это использование.
  • Как я могу ограничить его до 80% использования процессора?
  • Может ли это атака DDOS?
  • Есть ли способ предотвратить DDOS?

Я установил eset-nod32 на свои vps, но в журналах он не обнаруживает никаких атак. Я пробовал искать IIS и предотвращать DDOS и просто нашел расширение для запрета IP-адресов, но как я могу найти, какой IP-адрес генерирует трафик?

Веб-сайт написан в ASP.NET и C#. Как я могу определить, что происходит на этом веб-сайте и какие строки кодов вызывают использование процессора?

Кроме того, один из моих веб-сайтов должен иметь доступ к рабочему столу администратора и читать и записывать некоторые файлы. Поэтому из-за этого я изменил свой пул приложений → identity (Process Model) на локальную систему, и я не знаю, связано ли это с использованием ЦП или нет.

4b9b3361

Ответ 1

Ну, это может занять много времени, чтобы выяснить. Несколько пунктов, чтобы сузить это:

Ответ 2

Диагностирование

С точки зрения диагностики того, что создает пул приложений, вы можете:

  • Выберите сервер
  • Перейдите в IIS > Рабочие процессы

Server Settings

Это должно вызвать такое меню, чтобы вы могли определить, какой пул приложений работает amok.

Worker Processes

Оттуда вы можете просто перезапустить пул приложений и 9 раз из 10, чтобы исправить любые возникающие у вас проблемы.

Лечение

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

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

В вашем случае, если вы хотите, чтобы он перезагрузился на 80%, вы можете щелкнуть правой кнопкой мыши по пулу приложений и перейти в "Дополнительные настройки" и применить следующие настройки:

App Pool Advanced Settings

ПРИМЕЧАНИЕ. Как отмечал kraken101, разные графические интерфейсы IIS рассматривали это по-разному с течением времени. Хотя значение конфигурации всегда находится в 1/1000%, иногда графический интерфейс принимает весь процент.

Вы можете добавить это в свою конфигурацию следующим образом:

<applicationPools>
   <add name="DefaultAppPool">
     <cpu limit="80000" action="KillW3wp" resetInterval="00:01:00" />
   </add>
</applicationPools>

В качестве альтернативы вы могли бы script с помощью Powershell WebAdministration Module следующим образом:
(* убедитесь, что средства веб-скриптинга включены)

Import-Module WebAdministration

$appPoolName = "DefaultAppPool"
$appPool = Get-Item "IIS:\AppPools\$appPoolName"
$appPool.cpu.limit = 80000
$appPool.cpu.action = "KillW3wp"
$appPool.cpu.resetInterval = "00:01:00"
$appPool | Set-Item

Предотвращение

Вышеупомянутые шаги помогут исправить некоторые вещи, как только они сломаются, но на самом деле не будут устранять любые основные проблемы, которые у вас есть.

Вот некоторые ресурсы для контроля производительности:

Ответ 4

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

Решение:

Прежде всего найдите приложение, которое вызывает интенсивное использование памяти.

Это можно найти в разделе "Сведения" диспетчера задач.

Далее.

  • Откройте менеджер IIS.
  • Нажмите Пулы приложений. Вы найдете множество пулов приложений, которые использует ваша система.
  • Теперь из диспетчера задач вы обнаружили, какое приложение вызывает интенсивное потребление памяти. Для этого было бы несколько вариантов, и вам нужно выбрать тот, который имеет "1" в нем. Столбец приложения вашего веб-приложения.
  • Когда вы нажмете на пул приложений с правой стороны, вы увидите опцию Предварительные настройки в разделе "Редактировать пулы приложений". Перейдите в раздел Дополнительные настройки. 5. Теперь под общей категорией установите Включить 32-разрядные приложения в True
  • Перезагрузите сервер IIS или вы увидите, что потребление идет в разделе производительности вашего диспетчера задач.

Если это решение работает для вас, добавьте комментарий, чтобы я мог знать.

Ответ 5

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

Это работало для меня на моей локальной машине

Ответ 6

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

  1. Высокий уровень ошибок в вашем веб-приложении ASP.NET
  2. Увеличение веб-трафика, вызывающее высокую загрузку процессора
  3. Проблемы с зависимостями приложений
  4. Вывоз мусора
  5. Запросы блокируются или зависают где-то в конвейере ASP.NET
  6. Неэффективный код .NET, который необходимо оптимизировать

Ответ 7

Используйте procmon, чтобы определить вашу проблему.

Ответ 8

Недавно у меня была эта проблема, и как только я определил, какой из AppPool вызывает эту проблему, единственный способ решить проблему - удалить этот пул приложений и создать новый для сайта.