ASP.NET 3.5: что может вызвать преждевременный тайм-аут сеанса? - PullRequest
3 голосов
/ 08 августа 2011

Наш сеанс настроен на тайм-аут после 120 минут. Однако в последнее время один из производственных серверов столкнулся с множеством проблем. Поскольку у меня нет доступа к самому серверу, я работаю над ограниченной информацией здесь. У нас есть два сервера, на которых развернут наш сайт. Сервер A работает нормально все время, но у сервера B постоянно возникают проблемы с истекшим сеансом. Это было недавно, как и в последние две недели.

Я знаю, что не предоставляю достаточно информации для непосредственного определения проблемы, но какие проблемы могут привести к тому, что сеанс будет сброшен без какой-либо причины или причины?

Ответы [ 5 ]

4 голосов
/ 11 августа 2011

Видимо, я это исправил. Я открыл расширенные настройки пула приложений IIS7 для обоих серверов и заметил одно отличие: параметр Regular Time Interval был 5 на сервере A и 1740 на сервере B. Я изменил настройку сервера A на 1740 (по умолчанию), и проблемы прекратились немедленно.

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

Хотя я до сих пор не до конца понимаю, как я все исправил, это было либо совпадение, либо проблема в низкой 5-минутной настройке.

Если кто-то хочет пролить свет на это, то непременно сделайте это.

1 голос
/ 08 августа 2011

На ум приходит несколько вещей:

Как сказал @Steve Morgan, если вы используете внутрипроцессные сеансы и «липкие» сеансы, это может быть вызвано проблемой в балансировщике нагрузки.При балансировке нагрузки сеансы всегда должны быть вне процесса, потому что, откровенно говоря, «залипание» не означает, что сеансы не будут проходить между двумя компьютерами.Это просто означает, что это менее вероятно.Если балансировщик нагрузки перегружен, пользователи будут отправлены на сервер, отличный от первого.

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

Я предполагаю, что у вас есть комбинация проблем.Начните с перехода к сеансам вне процесса и настройте сервер состояний.Это преодолеет немедленную боль.Затем начните просматривать журналы балансировщика и веб-сервера, чтобы выяснить, нужен ли вам лучший балансировщик или необходимо внести изменения в код для устранения утечек памяти.

1 голос
/ 08 августа 2011

Пул приложений может быть переработан по одной из нескольких причин.Существует несколько параметров, превышение любого из которых приведет к перезагрузке ASP.NET:

  1. Перезапуск рабочих процессов (в минутах)
  2. Перезапуск рабочего процесса (в запросах)
  3. Перезапуск рабочих процессов в следующие моменты времени
  4. Максимальная виртуальная память
  5. Максимальная используемая память

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

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

Вы говорите, что используете два сервера.Если состояние сеанса теряется, звучит так, как будто вы используете состояние сеанса in-proc.В этом случае я предполагаю, что вы используете балансировку нагрузки с помощью «липких сессий» (когда последующие запросы отправляются на один и тот же сервер)?

Если я ошибаюсь и вы используете общее состояние (например, SQL)Поставщик состояния сеанса сервера или State Server), может быть, часы не синхронизированы на ваших серверах?

0 голосов
/ 01 декабря 2011

Рабочее решение:

  1. запуск " ASP.NET State Server " в ваших службах (сделайте его автоматическим, чтобы он всегда запускался)
  2. добавьте этона ваш web.config (скопируйте как есть!):
<system.web>
    <sessionState mode="StateServer"
      stateConnectionString="tcpip=localhost:42424"
      cookieless="false"
      timeout="60" />
    <machineKey validationKey="DCB7132A24938F2166E362214ADAD861FA6B819E0A337F0E63257F87014A37B5EBC5D9F9AD107C38E3D3378BC35CBAF81407F3E4D8BA430FD65348DDCC469623" decryptionKey="DD09731F76271B2AAE6AE957626F8D1B8E3CBF11EF8E3CDDF01332CDF914D4B5" validation="SHA1" decryption="AES" />
</system.web>

** примечание: или сгенерируйте свой собственный ключ машины: http://aspnetresources.com/tools/machineKey


Теперь вы можете перезапустить свой пул приложений, изменить ваш web.config или перезапустить веб-сервис - и сеансы уже на месте!Теперь вы также можете активировать веб-сады в пулах для повышения производительности.

0 голосов
/ 08 августа 2011

Были ли недавно установлены какие-либо новые сайты на вашем сервере?Мы столкнулись с этой проблемой при переходе на .net 4 и не думали создавать новый пул приложений для новых сайтов .net 4 (в отличие от .net 2 / 3.5).Это приводило к тому, что пул приложений постоянно перезапускался, поскольку они не могут работать в одном и том же пуле приложений.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...