IIS поток 100%, выполнил дамп, но не знаю, как продолжить - PullRequest
3 голосов
/ 04 марта 2012

Так что мой сервер в последнее время немного сходит с ума, время от времени мой IIS-поток потребляет 100% моего процессора и зависает, пока я не перезапущу его.

Я сделал дамп и нашелоднако, на странице ASPX виновника я не знаю, как дальше оттуда выяснить, что происходит.

Очевидно, что я сделал что-то очень неправильное - поэтому можно увидеть, где в коде находятся потокиработает, когда IIS начинает пожирать мой процессор?

Спасибо, Рон

Ответы [ 3 ]

1 голос
/ 04 марта 2012

Чтобы увидеть, какой код выполняют потоки, вам понадобятся символы (файлы .pdb), которые соответствуют коду, который выполнялся. Вам также нужно будет установить символы для библиотек .NET Framework / Windows. Этот KB описывает, как это сделать: http://support.microsoft.com/kb/311503

Средство WinDbg и расширение отладки SOS.dll позволяют найти потоки с самым высоким ЦП !runaway, а затем вы можете проверить стек !clrstack. У Тесс есть отличная демонстрация, показывающая, как использовать это для отслеживания высокой загрузки ЦП здесь: http://blogs.msdn.com/b/tess/archive/2008/02/22/net-debugging-demos-lab-4-high-cpu-hang.aspx

0 голосов
/ 04 марта 2012

Недавно я оказался в такой же ситуации: я хотел измерить то, что происходит на моем живом производственном сервере.

Задав вопрос также на форуме ANTS Profiler в Red Gate, я получил отличный ответ от разработчиков :

В основном, это указывало на версию 7 программы ANTS Profiler для программы раннего доступа (EAP).У этого есть функция, которую они называют «непрерывным профилированием», которая в основном выполняет отслеживание рабочего процесса IIS.

0 голосов
/ 04 марта 2012

Обычно это когда вы делаете замкнутый цикл - что-то вроде.

function int ThisOne(int SomeVar)
{
   return SomeVar+1;
}

function int ThisOne(int ? SomeVar)
{
  // here you try to call the ThisOne(int SomeVar), 
  // but you call him self and crash
  return SomeVar == null ? 0 : ThisOne(SomeVar);
}

Другой способ сделать эту ошибку, которая также делает замкнутый цикл и сбой

public string sMyText
{
   get {return sMyText;}
   set {sMyText = value;}
} 

Подобные вопросы: Как вывести из строя пул приложений?

Сбои и перезапуск IIS без сброса мини-дампа

...