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

мое использование процессора составляет 100% большую часть времени в Windows Server 2008-R2 с моими собственными vps, vmware, quad core и 4GB Ram. Когда я открываю Диспетчер задач windows и иду на монитор ресурсов, я вижу, что 100% использование из-за workerprocess.exe. У меня есть 3 веб-сайта в моем IIS.

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

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

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

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

6 ответов


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


Диагностика

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

  1. выберите сервер
  2. перейдите в IIS > рабочие процессы

Server Settings

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

Worker Processes

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

лечения

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

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

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

App Pool Advanced Settings

Примечание: As kraken101 указал, различные IIS GUIs обработали это по-разному со временем. Хотя значение конфигурации всегда находится в 1/1000%, иногда GUI принимает весь процент.

вы можете добавить это свой конфиг такой:

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

кроме того, вы можете написать его с помощью Powershell Модуль WebAdministration такой:
(*убедитесь, что web-scripting-tools включен)

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

предупреждение

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

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


используйте PerfMon для сбора данных и DebugDiag для анализа.

нашел эту ссылку при поиске подобной проблемы.

http://www.iis.net/learn/troubleshoot/performance-issues/troubleshooting-high-cpu-in-an-iis-7x-application-pool


использовать procmon и определить вашу проблему.


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

устранение:

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

вы можете найти это в разделе сведений Диспетчера задач.

далее.

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

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


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