1

Мы периодически получали отчеты о следующей ошибке сервера от пользователей.Нужна помощь в отслеживании спорадических ошибок сервера «Не удалось выполнить сериализацию состояния сеанса»

[OutOfMemoryException: Exception of type System.OutOfMemoryException was thrown.] 
[HttpException (0x80004005): Unable to serialize the session state. Please note that non-serializable objects or MarshalByRef objects are not permitted when session state mode is ‘StateServer’ or ‘SQLServer’ 

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

В течение рабочих часов веб-служба имеет около 90-100 активных соединений. Единственным другим сайтом на этом сервере является промежуточная версия этого сайта, которая попадает очень редко. Состояние сеанса хранится на том же экземпляре SQLServer, что и база данных приложений, размещенная на довольно большом кластере виртуальных машин. Похоже, что ни веб-сервер, ни SQLServer не облагались налогом (как процессор, так и память), пока это происходит.

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

Также не наблюдается корреляции между зарегистрированными ошибками и любыми зарегистрированными событиями мониторинга производительности. Это включает в себя массив счетчиков PERFMON в том числе:

.NET CLR Jit(w3wp)\notal # of IL Bytes Jitted 
.NET CLR Jit(w3wp)\IL Bytes Jitted/sec 
.NET CLR Jit(w3wp)\% Time in Jit 
.NET CLR Jit(w3wp)\# of Methods Jitted 
.NET CLR Jit(w3wp)\# of IL Bytes Jitted 
ASP.NET Apps v1.1.4322(__Total__)\Requests Failed 
ASP.NET Apps v1.1.4322(__Total__)\Errors Unhandled During Execution/Sec 
ASP.NET Apps v1.1.4322(__Total__)\Errors Unhandled During Execution 
ASP.NET Apps v1.1.4322(__Total__)\Cache Total Turnover Rate 
ASP.NET Apps v1.1.4322(__Total__)\Errors During Preprocessing 
ASP.NET Apps v1.1.4322(__Total__)\Errors During Execution 
ASP.NET Apps v1.1.4322(__Total__)\Requests Executing 
ASP.NET Apps v1.1.4322(__Total__)\Requests Total 
ASP.NET Apps v1.1.4322(__Total__)\Errors Total 
ASP.NET Apps v1.1.4322(__Total__)\Sessions Abandoned 
ASP.NET Apps v1.1.4322(__Total__)\Errors Total/Sec 
ASP.NET Apps v1.1.4322(__Total__)\Anonymous Requests/Sec 
ASP.NET Apps v1.1.4322(__Total__)\Requests/Sec 
ASP.NET Apps v1.1.4322(__Total__)\Session SQL Server connections total 
ASP.NET Apps v1.1.4322(__Total__)\Cache Total Hit Ratio 
ASP.NET v1.1.4322\Requests Current 
ASP.NET v1.1.4322\Request Execution Time 
Memory\Pages/sec 
Bytes Total/sec 
PhysicalDisk(_Total)\Avg. Disk Queue Length 
Processor(_Total)\% Processor Time 
Web Service Cache\File Cache Hits % 
Web Service Cache\File Cache Misses 
Web Service Cache\File Cache Hits 
Web Service(_Total)\Current Connections 
Web Service(_Total)\Post Requests/sec) 

Единственный образец, который я могу увидеть в журналах не коррелирует с возникновением этих ошибок, но это единственный образец, который я могу видеть. Посмотрев на журналы perfmon, мы видим шаблон, в котором «Total # of IL Bytes Jitted», «IL Bytes Jitted/sec», «% Time in Jit», «Количество методов Jitted» и «№ IL Bytes Jitted» «счетчики для промежуточного сайта (который не должен получать никакого трафика) не извлекает данные за 20-50-минутный период, после которого происходит немедленный всплеск в« IL Bytes Jitted/sec »и скачок в«% времени » в Jit "на 2-20 минут до 99% для основного сайта.

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

Спасибо!

+0

Это, скорее всего, объект претворяются в состояние сеанса, не сериализации, проверьте все ваши лиц правильно оформлены с [Serializable] атрибут. Если вы используете resharper и щелкните правой кнопкой мыши

+0

Спасибо за отзыв! Причина, по которой я отклоняюсь от этой проблемы, заключается в том, что большую часть времени я вижу те же функции страниц без ошибок сервера. – Daniel

ответ

0

Это дикий удар, так как в последнее время у меня была аналогичная проблема (не совсем то же самое).

Вы используете флаг /3GB при запуске для своего сервера?

Даже если вы этого не сделаете, вы можете взглянуть на записи таблицы столовых систем через perfmon (под памятью). Вы должны иметь доступ к 15K. Все, что находится под 5-10K, является «плохим» и может привести к исключениям OOM при сохранении на сеанс.

http://blogs.technet.com/b/clint_huffman/archive/2008/04/07/free-system-page-table-entries-ptes.aspx

+0

Thanks Phil, На сервере нет установленного флага/3GB, и похоже, что веб-сервер сидит на 180701 бесплатных столах таблицы системных страниц. Я добавлю этот счетчик к своим журналам и посмотрю, увидим ли мы это при ошибке при возникновении ошибки. (Кстати, как вы добавляете разрывы строк?) – Daniel

+0

Похоже, что столы с таблицами свободных систем сидят довольно близко к 180k (она поддерживается между 180k и 181k на оставшуюся пятницу и все выходные). – Daniel

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