Как увеличить лимит на объем принимаемого запроса в IIS для 1С: устранение ошибки «Недостаточно свободной памяти»

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При работе с веб-сервисами, HTTP-запросами или при публикации информационной базы 1С на веб-сервере Internet Information Services (IIS), администраторы и разработчики часто сталкиваются с проблемой передачи больших объемов данных. Типичный сценарий: небольшие запросы проходят успешно, но при попытке передать крупный файл или массив данных возникает ошибка: «Недостаточно свободной памяти для выполнения операции» или «Неспецифицированная ошибка работы с ресурсом» при выполнении POST-запроса к ресурсу /e1cib/logForm.

Важно понимать, что наличие большого объема физической оперативной памяти на сервере (например, 96 ГБ) не гарантирует автоматического решения проблемы. В IIS и программной среде ASP.NET установлены жесткие лимиты «по умолчанию», предназначенные для защиты сервера от DoS-атак. Разберем пошагово, как найти и изменить эти ограничения, чтобы обеспечить стабильную работу 1С.

Анализ причин возникновения ошибки

Прежде чем приступать к настройкам, проанализируем ситуацию. Когда клиент (например, другая база 1С) отправляет POST-запрос, пакет данных проходит через несколько уровней фильтрации и обработки:

  1. Уровень фильтрации запросов IIS (Request Filtering): Проверяет размер тела запроса на самом входе.
  2. Уровень среды выполнения (ASP.NET Runtime): Ограничивает объем данных, которые может обработать управляемый код расширения 1С.
  3. Уровень буферизации (Upload Read Ahead): Используется при работе через SSL или Windows-аутентификацию.
  4. Рабочий процесс пула приложений (w3wp.exe): Ограничивает использование адресного пространства (особенно критично для 32-битных процессов).

Рассмотрим подробнее каждый из этих этапов и выясним, где именно вносятся изменения.

Шаг 1. Настройка фильтрации запросов (maxAllowedContentLength)

Первый барьер, с которым сталкивается запрос — это модуль фильтрации. Если размер POST-запроса превышает установленный лимит, сервер просто сбросит соединение или выдаст ошибку 413.1.

Для изменения этого лимита нам необходимо отредактировать параметр maxAllowedContentLength. Значение здесь указывается в байтах. По умолчанию оно составляет около 30 МБ (30,000,000 байт).

Рассмотрим, как изменить этот параметр через файл web.config, который находится в папке с опубликованной базой 1С:


<system.webServer>
    <security>
        <requestFiltering>
            <requestLimits maxAllowedContentLength="104857600" />
        </requestFiltering>
    </security>
</system.webServer>

В данном примере мы установили лимит в 100 МБ. Максимально возможное значение — 4,294,967,295 байт (4 ГБ).

Если вы предпочитаете использовать графический интерфейс IIS Manager, выполните следующие действия:

  1. Выберите нужный сайт или опубликованное приложение в дереве слева.
  2. В центральной части откройте раздел «Фильтрация запросов» (Request Filtering).
  3. В панели «Действия» справа нажмите «Изменить параметры функции» (Edit Feature Settings).
  4. В поле «Максимально допустимая длина содержимого (байт)» введите нужное значение.

Шаг 2. Настройка среды выполнения ASP.NET (maxRequestLength)

Даже если IIS пропустил пакет, его может заблокировать среда ASP.NET, через которую работают расширения 1С. Здесь используется параметр maxRequestLength. В отличие от предыдущего пункта, здесь значение указывается в килобайтах.

По умолчанию лимит часто составляет всего 4096 КБ (4 МБ). Разберем, как его увеличить в разделе system.web файла web.config:


<system.web>
    <httpRuntime maxRequestLength="102400" executionTimeout="300" />
</system.web>

В этом примере мы установили 100 МБ (102,400 КБ) и увеличили время ожидания (executionTimeout) до 300 секунд, так как обработка тяжелых запросов требует времени.

Шаг 3. Настройка буфера предварительного чтения (uploadReadAheadSize)

Ситуация усложняется, если вы используете протокол HTTPS или аутентификацию Windows. В этих случаях IIS считывает всё тело запроса в буфер, прежде чем передать его дальше. Если объем данных больше размера буфера, может возникнуть ошибка памяти.

Этот параметр настраивается через «Редактор конфигурации» (Configuration Editor) в IIS:

  1. Откройте «Редактор конфигурации» на уровне сайта.
  2. Перейдите в раздел system.webServer/serverRuntime.
  3. Найдите параметр uploadReadAheadSize.
  4. Увеличьте значение (указывается в байтах). Рекомендуется устанавливать значение, равное вашему maxAllowedContentLength.

Шаг 4. Проверка разрядности и лимитов пула приложений

Вернемся к сообщению (1) из обсуждения на форуме. Если ваша платформа или пул приложений работают в 32-битном режиме, они ограничены 4 ГБ адресного пространства. Для современных баз 1С с большим количеством данных это критически мало.

Проанализируем настройки пула приложений:

  1. Откройте «Пулы приложений» (Application Pools) в IIS Manager.
  2. Найдите пул, под которым работает ваша база (обычно он называется так же, как база, или 1C Web-Services pool).
  3. Нажмите «Дополнительные параметры» (Advanced Settings).
  4. Убедитесь, что параметр «Разрешить 32-разрядные приложения» (Enable 32-Bit Applications) установлен в значение False.
  5. Проверьте параметры «Ограничение частной памяти» (Private Memory Limit) и «Ограничение виртуальной памяти». Убедитесь, что там стоят нули (без ограничений), чтобы процесс мог использовать все доступные 96 ГБ памяти сервера при необходимости.

Шаг 5. Специфика 1С и десериализация

Важно помнить, что ошибка «Недостаточно свободной памяти» может генерироваться не только сервером IIS, но и самим ядром 1С. Когда w3wp.exe получает огромный XML или JSON пакет, он должен превратить его в объекты 1С. Этот процесс требует создания непрерывного блока памяти. Если память сильно фрагментирована или запрос аномально велик (например, выгрузка всей базы в одном POST-запросе), 1С выдаст ошибку, даже если лимиты IIS подняты. Для снижения нагрузки на память за счет передачи архивированных пакетов подойдет пример обработки сжатых в Zip данных HTTP-запроса.

В таких случаях мы рекомендуем:

Итоговая таблица параметров

Для удобства сведем все ключевые параметры в единый список:

Применяя эти настройки комплексно, мы исключаем «узкие места» в архитектуре взаимодействия IIS и 1С, что позволяет стабильно обрабатывать запросы любого объема. В случаях, когда на основе веб-сервисов требуется настроить регулярную синхронизацию по расписанию, применяется программа для регулярного автоматического обмена между базами 1С.

← На главную