Назад | Перейти на главную страницу

Периодически загруженный процессор (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 запросов / сек, так что все это очень странно.

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

Будем очень признательны за любые советы / подсказки о том, как дальше диагностировать эту проблему.

Ура.

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

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

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

Попытайтесь выяснить, одна (или несколько) страниц загружается дольше. Убедитесь, что статистика IIS регистрируется, а затем поищите увеличение затраченного времени. Анализатор журнала оформления заказа (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, и установите лимиты запросов.