Мы начали видеть экземпляры на нашем сервере интрасети, где для любой страницы сервер просто отвечает страницей с ошибкой «HTTP / 1.1 New Session Failed». Кажется, мы можем исправить это, запустив IISRESET, но похоже, что мы лечим только симптом.
Сервер представляет собой виртуализированный сервер под управлением IIS6 в Windows Server 2003 с 0,5 ГБ ОЗУ. Наша интрасеть написана на ASP, но у нас также есть приложения ASP.NET 2.0, работающие на веб-сайте. Сайт настроен для анонимной и интегрированной аутентификации.
Что заставляет IIS попадать в это состояние ошибки? Может ли сервер быть переполнен запросами, т.е. нам нужно масштабировать и перенести некоторые приложения на другой сервер?
я видел KB210842 но я не уверен, что это применимо, поскольку это применимо к IIS 4
Возможно, в ваших журналах событий содержится дополнительная информация. Проверьте журналы приложений и системные журналы на наличие ошибок.
512 МБ ОЗУ недостаточно для Windows 2003 + IIS 6 при любой приличной нагрузке - особенно с ASP .NET 2.0. Обновление до 1 ГБ будет иметь большое значение.
Я хочу добавить сюда немного информации. Проблема имеет только одну прямую причину - недостаточно памяти для нового сеанса. Настоящий вопрос в том, что потребляет память, и, очевидно, ответ в каждой конкретной ситуации разный. Позвольте мне сначала сказать несколько слов о моей настройке:
Я размещаю на VPS-серверах на основе Virtuozzo, и там вы можете более четко увидеть проблему. В чем разница - на VMWare у вас есть что-то похожее на реальную машину - с файлом подкачки и оперативной памятью они могут не точно соответствовать реальным, но эффективно VMWare (и любое решение на основе аппаратной виртуализации) можно рассматривать как реальную машину . С Virtuozzo вы получаете только оперативную память - часть ее будет в файле подкачки, но внутри VPS вы не заметите разницы. Итак, я использую VPS-es с объемом памяти всего 286 МБ, и это вся память, которую я могу использовать, когда вы используете VMWare с памятью, установленной на 286, у вас также может быть дополнительное пространство подкачки, поэтому ваша используемая оперативная память будет больше (как Конечно, многое зависит от размера файла подкачки).
На машине 286 МБ я могу разместить около 15-20 приложений с изрядным количеством посетителей. Я использую свою собственную структуру и компоненты, включая собственный движок базы данных. Я уверен, что утечек памяти не произойдет (после многих лет тестирования), но 286 МБ памяти в целом - это очень тонкий лед. Время от времени вы получаете сообщение «сбой нового сеанса» - вопрос в том, как избежать зависания в нем до перезапуска (IIS или машины). Ответ заключается в настройке ограничений памяти приложения COM + и, возможно, в некоторых других вариантах утилизации. Вы должны убедиться, что ограничения таковы, что рабочий процесс будет перезапущен, когда все станет некрасиво, и вы должны держать в голове общий объем памяти, используемый всеми приложениями COM +, которые вы используете, потому что если общий объем ограничений памяти больше, чем полезная память, которую вы можете получить в ситуации, когда ни один из рабочих процессов не превышает лимит, но все вместе занимают всю доступную память, и ни один из них не будет повторно использоваться для освобождения некоторых драгоценных мегабайт.
Еще одна вещь, которую следует проверить, - это параметры кэширования ASP - сколько файлов кэшируется в памяти, сколько кэшированных механизмов сценариев (это также происходит в памяти). Значения по умолчанию довольно большие, и эффект напоминает утечку памяти, особенно если у вас много файлов ASP и много сайтов (кэширование настраивается на глобальном уровне, но выполняется в рабочих процессах).
Таким образом, путем точной настройки приложений COM + и параметров кеширования вы можете запустить свой сервер, если не совсем гладко, то, по крайней мере, убедиться, что он будет автоматически восстанавливаться с возможным только несколькими запросами в день максимум (от, скажем, сотни тысяч), возвращая New сессия не удалась. Если вы сохраняете небольшое количество приложений COM + (максимум 2-3), вы можете отслеживать и выбирать соответствующие ограничения памяти, возможно, настроить повторный интервал времени для приложений, которые не чувствительны к потерям сеансов и т. Д.
Есть еще один момент, который следует учитывать при размещении приложений .NET на одном сервере. Без внимания они могут убить все остальное и захватить все ресурсы сервера. Проблема заключается в сборке мусора - приложения ASP.NET (и любые .NET) не будут освобождать свою память, потому что она требуется некоторым классическим приложениям ASP или PHP и будут занимать память, даже если они ее не используют - в конечном итоге они освободят это, но они могут хранить его часами - просто так. Решение состоит в следующем: избегайте смешивания приложений .NET и других приложений на одном сервере; если вы не можете избежать этого, поместите приложения .NET в отдельные пулы COM + и установите строгие ограничения памяти и сделайте их как можно более низкими.
Что ж, надеюсь, это полезно. У меня большой опыт управления серверами с небольшим объемом доступной памяти - это не очень сложно, но нужно обращать внимание и не надеяться, что проблема исчезнет с помощью патча или другого волшебного решения.
Сколько памяти доступно, когда вы получаете эту ошибку? Если вы переполнили всю память, новые сеансы не удастся.
Вы используете состояние сеанса в IIS или во внепроцессном провайдере. Перемещение состояния сеанса к провайдеру позволит вам использовать память из службы состояния сеанса вместо процесса IIS. Кроме того, состояние сеанса сохранит перезапуски IIS и домена приложения. Также отмечу, что 512Meg это мала.
Кажется, что у IIS6 недостаточно памяти для выделения для сеанса. Если это происходит слишком часто, вам может потребоваться установить предел повторного использования памяти для пула приложений. Таким образом, он не «съест» все ваши доступные ресурсы. Имейте в виду, что повторное использование памяти приведет к потере сеанса.