Недавно я перенес набор серверов 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 с использованием высокого ЦП без трафика
Любая помощь высоко ценится
это действительно похоже, что какой-то код застрял в бесконечном цикле.
Приходит запрос, IIS начинает его обслуживать, что-то (возможно, ошибка) запускает это поведение, рабочий поток входит в бесконечный цикл и привязывает ЦП к 100%, а затем он просто остается таким, пока пул приложений не будет переработан.
Даже если новые запросы не поступают, ЦП остается в использовании, потому что зависший поток никогда не завершается.
Иногда новый запрос вызывает такое поведение очередной раз, и тогда вы получите два воткнул CPU (или три, или четыре ...).
Повторное использование пула приложений, конечно, завершает все рабочие потоки, поэтому проблема решается ... пока это не повторится снова.
Вы можете попробовать использовать Инструмент диагностики отладки к отслеживать что вызывает проблему. Обычно он предназначен для устранения сбоев и утечек памяти, но может помочь найти, какой компонент вызывает проблему.
Была такая же проблема с Sharepoint 2013 и IIS 8 в 2012 году ... Мы никогда не устраняли неполадок, а вместо этого перешли на SP2013 на 2008 R2, и все было хорошо.
Вы можете прикрепить профилировщик процессора к процессу w3wp и посмотреть, что там происходит. Вы должны увидеть, что потребляет циклы ЦП.
Для меня это похоже на бесконечный цикл. Я видел это несколько раз, несмотря на то, что IIS заявлял, что нет невыполненных запросов. Я не уверен, как это может быть, но это именно то, что вы бы увидели. Сложность заключается в том, что IIS не регистрирует запросы до тех пор, пока они не будут выполнены, поэтому трудно определить, какой запрос вызывает такое поведение.