ASP.NET с высокой загрузкой ЦП, приводящей серверы к коленям

8

Итак, наша новая сборка имеет 100% пиков процессорного времени на каждом сервере через произвольные интервалы. В течение длительного времени это делает сайт полностью безразличным - это будет происходить в часы пик, когда люди из разных стран заходят на сайт и т. Д.

Мы смотрели на perfmom, профилировщики памяти, CLR-профилировщик, sql-профилировщики, профилировщик Red Gate и мутировок, пробовали нагрузочное тестирование в UAT - но не можем даже воспроизвести проблему. Это может означать, что только тысячи пользователей, попавших на живой сайт, вызывают это.

Мы обратили внимание на то, что новый код - сломанная сборка - на самом деле использует заметно меньше потоков.

Мы также используем пружину для МОК - это имеет репутацию кровати?

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

Мы действительно уничтожены - есть ли у кого-нибудь боевые шрамы, которые могут спасти нам несколько жизней?


источник
Что сообщают датчики температуры? Интересно, ваш блок питания не может не отставать. (
Понятия
2
Когда вы говорите, что выключает сервер, можете ли вы добавить больше деталей, это BSOD? Вы подразумеваете, что это перезапускает или возможно перезапуск домена приложения.
Нет никакого способа, которым "100% -ый всплеск процессора " мог "сбить" сервер. Это должно было бы быть привязано к 100% в течение довольно долгого времени, в сочетании с проблемами с рассеиванием тепла.
Эндрю Барбер
1
Что это делает ?? Какой процесс использует процессор на пике? Это самый важный вопрос.
Алиостад
Обновил мой вопрос - это лучше? Спасибо за -1 :)

Ответы:

3

Я предлагаю делать дампы памяти и анализировать их в WinDdg с помощью Sos. Я исправил некоторые проблемы с нашей продукцией, которые, вероятно, не смог бы диагностировать без WinDbg.

У Тесс Фернандес есть отличный блог, где вы можете научиться анализировать дампы памяти.


источник
этот блог - отличный ресурс, и мы его используем. Наша проблема в том, что мы не можем воссоздать проблему снова и получить дампы.
1
Чтобы воссоздать проблему, вы можете забить свою тестовую систему с помощью jmeter ( jmeter.apache.org ) и ab ( httpd.apache.org/docs/2.0/programs/ab.html ). Благодаря этим, многоядерным процессорам, быстрой локальной сети и некоторым коллегам, вы сможете достаточно нагрузить сервер.
Роман
1

Обычно это вызвано очисткой больших долгоживущих объектов в GC ( эта проблема возникла в stackoverflow, см. Ссылку ). Вы храните много коллекций объектов в кэше или сеансе?

Штурм GC

Я также рекомендую вам создать и настроить новый сервер для тестирования. Если у вас случайное сумасшествие и вы не знаете, почему и не можете его воспроизвести, я бы указал пальцем на аппаратное обеспечение или конфигурацию, а не на код.

Рик Шотт
источник
Мы не можем опубликовать новый код, потому что он добавляет новостные функции. Когда код был живым, использование GC было таким же - в том числе для поколения 2. Спасибо, хотя - у вас есть еще предложения?
Это не невозможно, но аппаратное обеспечение и конфигурация почти такие же, как и при последнем развертывании, к которому мы вернулись и успешно работаем.
1

Это виртуальный сервер с общими ресурсами или физический сервер? Если это первое, возможно, вы могли бы посмотреть на выделение ресурсов для этого сервера. Удачи...

Найджел Финдлейтер
источник
0

Попробуйте использовать cache serverкак интерфейс Apache Traffic Server (ATS).

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

Гил
источник
0

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

  1. Вы должны повторить проблему. Jmeter - хорошее начало из-за его широты, но мы не можем рекомендовать правильный инструмент, не зная нашу архитектуру.
  2. Ведение журнала специально на уровне приложения является обязательным. Вы можете включить трассировки IIS для медленной производительности, но в Microsoft сделали это, чтобы вы не могли захватить весь конвейерный поток, когда он медленный. Если это так трудно Репрографический, вы действительно как некоторые журналы , чтобы помочь вам сузить , где проблема. (как о, это всякий раз, когда мы называем этот сохраненный процесс).

100% CPU немного подозрительно в том смысле, что вряд ли это будет ввод / вывод (при условии, что db - это еще один блок, медленная база данных не должна вызывать 100% CPU на веб-серверах). Вы должны выглядеть ближе к дому.

М Афифи
источник