Нужна помощь в отслеживании спорадических ошибок сервера «Невозможно сериализовать состояние сеанса» - PullRequest
1 голос
/ 14 октября 2010

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

[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, что и база данных приложения, которая размещается на довольно большом кластере виртуальных машин.Ни Web-сервер, ни 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, мы видим шаблон, в котором "Общее количество IL-байтов соединилось", "IL-байтов соединилось / сек", "% времени в Jit", "# Методы соединились" и "# IL-байтов соединилось"«Счетчики для промежуточного сайта (который не должен получать трафик) не извлекают данные в течение 20-50 минут, после чего происходит мгновенный скачок« IL Bytes Joted / sec »и скачок в«% времени ».в Jit "на 2-20 минут до 99% для основного сайта.

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

Спасибо!

1 Ответ

0 голосов
/ 14 октября 2010

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

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

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

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

...