Как предотвратить использование ЦП 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 ответов
Ну, это может занять много времени, чтобы выяснить. Несколько пунктов, чтобы сузить его:
- определите, что убивает CPU. Я рекомендую Process Explorer http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx
- определите, что AppPool вызывает это
- исправить код
Диагностика
С точки зрения диагностики того, что пул приложений вызывает проблемы, вы можете:
- выберите сервер
- перейдите в IIS > рабочие процессы
это должно вызвать меню, как это, так что вы можете определить, какой пул приложений работает amok.
оттуда вы можете просто перезапустить пул приложений и 9 раз из 10, которые исправят любые непосредственные проблемы, которые вы имеющий.
лечения
если вы не запустите какой-то спорный бизнес, это, вероятно, не DDOS-атака. Вероятно, какой-то код просто висит, потому что он не может пройти на другой сервер или застрял в цикле или неправильно выделенных ресурсах, или ваш пул приложений просто не был переработан в то время.
вы можете справиться с этой проблемой программно без необходимости вручную идентифицировать, войти в систему и повторно использовать пул приложений. Просто настройте свойство CPU в пуле приложений. Вы можете убить (и автоматически перезапустить) свой процесс в любое время, когда вы достигнете порога процессора за определенное время.
в вашем случае, если вы хотите перезапустить его на 80%, вы можете щелкнуть правой кнопкой мыши на пуле приложений и перейти к расширенным настройкам и применить следующие конфигурации:
Примечание: 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 для анализа.
нашел эту ссылку при поиске подобной проблемы.
недавно я столкнулся с теми же проблемами и нашел решение, которое сработало для меня и значительно снизило уровень потребления памяти.
устранение:
прежде всего найдите приложение, которое вызывает интенсивное использование памяти.
вы можете найти это в разделе сведений Диспетчера задач.
далее.
- открыть диспетчер IIS.
- нажать на кнопку приложения Бассейны. Вы найдете много пулов приложений, которые использует ваша система.
- теперь из Диспетчера задач вы нашли, какое приложение вызывает большое потребление памяти. Для этого было бы несколько вариантов, и вам нужно выберите тот, который имеет " 1 " в столбце приложения вашего веб-приложения.
- при нажатии на пул приложений на правой стороне вы увидите опцию Дополнительные параметры под Редактирование пулов приложений. Перейдите в Дополнительные настройки. 5.Теперь в разделе общая категория установите включить 32-разрядные приложения до правда
- перезагрузите сервер IIS или вы можете увидеть потребление идет вниз в разделе производительности Диспетчера задач.
Если это решение работает для Вас, пожалуйста, добавьте комментарий, чтобы я мог знать.
недавно у меня была эта проблема, и как только я определил, какой AppPool вызывает проблему, единственным способом решить эту проблему было полностью удалить этот пул приложений и создать новый для сайта.