Недавно я перенес набор серверов Windows Server 2008 R2 / IIS 7.5 на новые серверы под управлением Windows Server 2012 / IIS 8.
Я испытываю странное поведение со стороны IIS. У нас есть 2 одинаковых сервера, на каждом сервере запущено 2 веб-сайта, каждый из которых имеет собственный пул приложений. Код для каждого из веб-сайтов идентичен. (Буквально ... та же самая DLL и все, только немного другая конфигурация).
Пулы приложений настроены на перезагрузку по расписанию каждые 24 часа, но в течение этого 24-часового периода загрузка ЦП рабочего процесса w3wp увеличивается с шагом 12,5% (на сервере установлено 8 процессоров, поэтому я не думаю, что это совпадение).
Как только загрузка ЦП возрастет, он НЕ БУДЕТ возвращаться вниз, пока приложение не перезагрузится. Насколько я могу судить, приложение ничего не делает и в настоящее время не обрабатывает никаких запросов. Я могу заблокировать весь трафик на сервер, и загрузка процессора останется там. Я даже могу перезапустить веб-сайт, и загрузка процессора остается прежней. Единственный способ сбросить использование ЦП - это перезапустить или перезапустить пул приложений, в котором он работает.
Я несколько уверен, что эта проблема не имеет ничего общего с моим кодом, но какая-то плохая конфигурация IIS или изменение в IIS 8, которое плохо работает с конфигурацией оборудования или что-то в этом роде?
Не уверен, важно это или нет, но это серверы Rackspace Performance Cloud.
Вот снимок экрана, показывающий загрузку ЦП с течением времени на этих серверах (зеленые стрелки указывают время, когда пул приложений перезагружается. Вы можете видеть, что каждое плато является целым кратным 12,5%:
Кто-нибудь наблюдал такое поведение? Я нашел этот вопрос в 2009 году, когда у кого-то возникла та же проблема с IIS 6:
IIS w3wp использует высокий процессор без трафика
Любая помощь высоко ценится
Вы можете попробовать использовать инструмент диагностики отладки, чтобы отследить причину проблемы. Это обычно для устранения сбоев и утечек памяти, но может помочь найти, какой компонент вызывает проблему.
источник
high CPU or RAM more 90%
?Это действительно похоже на некоторый код, застрявший в бесконечном цикле.
Приходит запрос, IIS начинает его обслуживать, что-то (возможно, ошибка) вызывает такое поведение, рабочий поток входит в бесконечный цикл и привязывает ЦП к 100%, а затем он просто остается таким, пока пул приложений не будет перезагружен.
Даже если новые запросы не поступают, процессор продолжает использоваться, потому что застрявший поток фактически никогда не завершается.
Иногда новый запрос вызывает это поведение снова , и тогда вы получаете два зависших процессора (или три, или четыре ...).
Переработка пула приложений, конечно, завершает все рабочие потоки, поэтому проблема решается ... до тех пор, пока это не произойдет снова.
источник
Вы можете подключить профилировщик процессора к процессу w3wp и посмотреть, что там происходит. Вы должны быть в состоянии увидеть, что потребляет циклы процессора.
источник
Похоже, бесконечный цикл для меня. Я видел это несколько раз, несмотря на то, что IIS сказал, что нет ожидающих запросов. Я не уверен, как это может быть, но это именно то, что вы увидите. Сложность состоит в том, что IIS не регистрирует запросы до тех пор, пока они не завершатся, поэтому выяснить, какой запрос вызывает такое поведение, сложно.
источник