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, и установите лимиты запросов.