Периодически высокая загрузка ЦП (100%) на рабочем веб-сервере

X-Post от StackOverflow:

https://stackoverflow.com/questions/9465123/intermittent-high-cpu-100-on-production-webserver

У нас есть веб-кластер с 3 веб-серверами, каждый с 24 ядрами и 24 Гб памяти.

Наше приложение является последней из исправленных ASP.NET 4.0, с MVC3, на IIS 7.5 - в своем собственном пуле приложений.

Очень периодически (возможно, каждые 2/3 дня) один из веб-серверов прекращает обслуживать запросы, и все 24 ядра будут показывать 100% ЦП (память и диск выглядят нормально).

Несколько раз, когда диспетчер IIS не был полностью заморожен, активные запущенные запросы, по-видимому, не дают никакой полезной информации с довольно случайным распределением по большому количеству областей / запросов сайта.

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

Дамп памяти рабочего процесса (около 4 ГБ - это размер!), Кажется, не показывает ни один из наших кодов / пространств имен где-либо в какой-либо из трассировок управляемого стека - но просто.Net start request вещь (возможно, я использую WinDbg неправильно - и неправильно загружает наши символы - но трассировка стека не показывает пропущенные / неназванные вызовы методов - так что я совсем запутался)

Наши серверы обычно обрабатывают 1000 req/sec довольно счастливо, так что все это очень странно.

Одна странная вещь, которую мы заметили в Perfmon - частота конфликтов / сек. Достигает 800. У нас нет какого-либо причудливого многопоточного кода в нашем приложении, и единственные блокировки у нас есть в нашем кеширующем коде (который не имеет изменился в возрасте).

Любые советы / советы о том, как дополнительно диагностировать эту проблему, будут наиболее цениться.

Приветствия.

3 ответа

Дэйв, несколько мыслей для начала:

Я предполагаю, что это w3wp.exe, который пожирает ваши ресурсы. Если нет, то, возможно, стоит запустить некоторые отчеты PAL, чтобы лучше понять общее состояние сервера: http://pal.codeplex.com/ Иногда я даже запускаю PAL, даже если это проблема IIS. PAL может обнаружить все виды проблем, о которых вы никогда не задумывались.

Проверьте Performance Monitor (как до, так и во время всплеска)... попробуйте выяснить, выше ли ваш запрос / сек. Приложений ASP.Net в периоды "медленного ответа"... Я считаю, что это самый быстрый способ сообщить вам если вы обрабатываете больше запросов, чем обычно.

Попробуйте выяснить, есть ли одна (или несколько) страниц, загрузка которых занимает больше времени. Убедитесь, что статистика IIS регистрируется, а затем посмотрите на увеличение времени. Анализатор Checkout Log ( http://www.iis.net/community/default.aspx?tabid=34&g=6&i=1864).

О, и не забудьте мини-профилировщик StackExchange http://code.google.com/p/mvc-mini-profiler/ только вы выясните, какой URL-адрес вызывает проблему.

Кроме того, не упускайте из виду обнаружение ошибок.NET:-)

Дайте нам знать, что вы видите. -Крис

Используйте DebugDiag 1.2 для анализа дампа:

https://www.microsoft.com/download/en/details.aspx?id=26798

Полезно знать, что любой процесс, способный использовать более одного потока, может довести загрузку до 100% на всех процессорах сервера. Это включает в себя собственный код и даже основные компоненты ОС.

Когда вы говорите "последнее исправление", для меня это означает "Центр обновления Windows", который не содержит многих более серьезных исправлений для Windows 2008 R2.

В частности, если приложение обращается к каким-либо файлам на удаленных общих папках, было бы неплохо применить исправления файловой системы:

Список доступных на данный момент исправлений для технологий файловых служб в Windows Server 2008 и Windows Server 2008 R2
http://support.microsoft.com/kb/2473205

Проверьте, является ли это целью атаки HashDos - и установите лимиты запросов.

Другие вопросы по тегам