Зависание сеанса IIS. Как устранить утечку ресурсов веб-сайта финализаторам?

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

Две проблемы, на которые стоит обратить внимание: 1. Почему сайт сливает ресурсы финализаторам. Это плохо 2. Чего ждет код Oracle — работайте над этим со службой поддержки Oracle

Вот в чем проблема:

У меня периодически возникают проблемы с веб-сайтом, размещенным на IIS6 (w2k3 sp2).

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

Я поместил отладчик (IISState) в процесс w3wp со следующим выводом. Записи с текстом «Поток ожидает освобождения блокировки. Ищет владельца блокировки». похоже, что они могут быть причиной проблемы. Кто-нибудь может сказать, какую блокировку ожидает процесс?

Спасибо

http://www.eggheadcafe.com/software/aspnet/33799697/session-hangs.aspx

В моем случае мое приложение .Net C# MVC работает с базой данных MySQL для данных и базой данных MS SQL для членства в .Net.

Я надеюсь, что кто-то с большим знанием IIS может помочь решить эту проблему.


person CLRBTH    schedule 11.02.2011    source источник


Ответы (3)


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

http://msdn.microsoft.com/en-us/library/ms178104.aspx

person Joel Etherton    schedule 11.02.2011
comment
Спасибо за ответ. Теперь я отслеживаю взаимоблокировки. Журнал пока ничего не сообщил. Я надеюсь получить больше результатов в понедельник, когда приложение активно используется. - person CLRBTH; 12.02.2011

Я бы объяснил зависание из-за сериализации сеанса. Дело не в сохранении/загрузке из какого-либо источника, а в том, что ASP.NET не позволяет одному и тому же сеансу одновременно выполнять две параллельные страницы, если только они не выполняются с сеансом только для чтения. Последнее делается либо в директиве страницы, либо в web.config, устанавливая EnableSessionState="ReadOnly".

Ваша проблема все еще существует, это не изменит того, что первый поток зависает. Я хотел бы убедиться, что ваши соединения с базой данных расположены правильно. Однако вы никогда не упоминаете в своем вопросе какую-либо базу данных Oracle (только Mysql и SQL Server). Почему вы вообще используете драйверы Oracle? (Кажется, это подходящее место для начала отладки.)

Однако, как заявил Дэвид Ван в своем ответе на связанный вопрос, второй частью вашей проблемы является блокировка, которая никогда не освобождается. Вам понадобится поддержка Oracle (или их исходный код) для дальнейшей отладки.

person sisve    schedule 11.02.2011
comment
Может быть, я должен был быть более четким в своем вопросе. Описание проблемы похоже на мое, в моем случае это приложение C# MVC, работающее с MySQL и базой данных SQL. Так что я не использую Oracle :) Спасибо за ваш ответ, изменение состояния сеанса только для чтения, по крайней мере, улучшит взаимодействие с пользователем. Я также подозреваю, что это проблема, связанная с сетью. Пользователь, который сообщает о большинстве зависаний, теперь подключен к производственному серверу через VPN, поэтому он использует локальный IP-адрес. Впервые за несколько недель он сообщил о дне без зависаний. Это объяснимо? - person CLRBTH; 12.02.2011

Зависание IIS не является чем-то удивительным. IISState устарел, и вы можете использовать Debug Diag,

http://support.microsoft.com/kb/919791 (при высокой загрузке ЦП) http://support.microsoft.com/kb/919792 (иначе)

Дампы зависаний должны сказать вам, что является основной причиной.

Поддержка Microsoft может помочь проанализировать дампы, если вы не знакомы с приемами. http://support.microsoft.com

person Lex Li    schedule 20.02.2011