2009-11-11 3 views
2

У нас есть приложение asp.net, которое активно использует службы REST/json через httpwebrequest и интенсивное использование веб-кеша. казалось бы, спорадически, рабочий процесс просто перестает отвечать. браузер сидит, ожидая ответа и никогда не получит его. Рестарт пула приложений, похоже, устраняет проблему. нет никаких необработанных исключений или любых других аномалий, которые мы заметили. (< 10% cpu util,> 80% свободной памяти)что может привести к тому, что asp.net перестанет отвечать

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

любые идеи?

выиграть 03 сервера/центра обработки данных (издание на Amazon EC2) asp.net 3,5

ответ

2

Если у вас есть, не реагирующий приложения с низкой загрузки процессора, то, скорее всего, проблемы параллелизма. У вас либо есть тупики, которые заставляют все ваши потоки останавливаться, либо ваши асинхронные потоки навсегда заканчиваются, и ThreadPool заканчивается голодом. Поскольку вы используете ASP.Net, вы должны проверить, как работает ThreadPool. Вы можете наблюдать за счетчиками производительности или, лучше, присоединяться к своему приложению с помощью windbg (вы можете получить его из инструментов отладки для Windows http://www.microsoft.com/whdc/DevTools/Debugging/default.mspx).

Launch WinDbg, подключить к процессу asp.net, а затем в командной строке:

.loadby mscorwks sos 
!ThreadPool 

Еще лучше, загрузить расширение sosex (http://www.stevestechspot.com/CommentView,guid,9fdcf4a4-6e09-4807-bc31-ac1adf836f6c.aspx) и проверьте тупик с

!dlk 

проверьте, какие блокировки потоков, переключитесь на один из потоков (с использованием пользовательского интерфейса или командной строки) и введите

!CLRStack 

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

+0

спасибо за указатель инструмента (sosex). я подозревал тупик для начала, но это позволило мне выяснить, что это было. в двух словах, если у вас есть прослушиватель трассировки, * и * приложение-трассировка, вы можете попасть в тупиковую ситуацию, потому что и системный.диагностический материал, и следящий подписчик блокируют «это», или слушатель. Плохо. – kolosy

Смежные вопросы