Почему растет папка Temp на сервере 1С и как это остановить

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

Проблема переполнения дискового пространства на сервере 1С — одна из наиболее часто встречающихся задач в практике системного администратора и программиста. Ситуация, когда папка Temp в профиле пользователя, под которым запущена служба 1С, разрастается до десятков гигабайт за короткий промежуток времени, требует немедленного вмешательства. Рассмотрим подробно, что именно вызывает этот рост, как диагностировать конкретного "виновника" и какие превентивные меры необходимо предпринять.

Что именно хранится в папке Temp на сервере 1С

Для начала проанализируем содержимое директории C:\Users\%userprofile%\AppData\Local\Temp. Вопреки распространенному мнению, там находятся не только бесполезные "хвосты", но и критически важные для работы платформы данные:

  1. Временные файлы rphost: Это файлы рабочих процессов сервера 1С. Обычно они имеют префикс v8_ и расширение .tmp. В них платформа сбрасывает промежуточные результаты при выполнении тяжелых запросов, формировании огромных отчетов или при нехватке оперативной памяти для обработки данных.
  2. Внешние компоненты: При инициализации драйверов торгового оборудования, криптографических библиотек или других внешних модулей, 1С распаковывает необходимые DLL-файлы именно сюда.
  3. Кэш конфигурации: Часть временных структур метаданных может создаваться в Temp для обеспечения быстрого доступа к ним в рамках текущего сеанса.
  4. Результаты фоновых заданий: При формировании файлов для отправки по электронной почте или генерации печатных форм в фоновом режиме, временные копии создаются в этой папке.
  5. Файлы обмена: При использовании стандартных механизмов обмена данными (РИБ или универсальный обмен), файлы выгрузки XML или архивы ZIP сначала формируются во временной директории, а уже затем перемещаются в целевую папку.

Выясним причину аномального роста: пошаговая диагностика

Разберем ситуацию, когда папка растет на несколько гигабайт в день. Нам необходимо сопоставить файлы с конкретными действиями в системе. Проанализируем ситуацию с помощью следующих инструментов:

1. Использование Монитора ресурсов (ProcMon)

Для точного определения процесса, который "пишет" файлы, воспользуемся утилитой Process Monitor. Настроим фильтр по колонке Path, указав, что путь должен содержать строку "Temp". Это позволит в реальном времени увидеть, какой именно PID (идентификатор процесса) создает файлы. Если вы видите, что запись ведет rphost.exe, значит, нагрузку создает конкретный рабочий процесс 1С.

2. Анализ имен файлов по PID

Платформа 1С именует временные файлы по определенной логике. Часто в названии файла вида v8_XXXX_... цифры XXXX соответствуют PID процесса rphost. Зная этот идентификатор, мы можем зайти в Консоль администрирования серверов 1С, найти процесс с этим номером и увидеть, какие информационные базы он обслуживает и какие пользователи в данный момент выполняют наиболее ресурсоемкие операции.

3. Проверка механизмов обмена данными

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


// Ошибочный подход: файл создан, но не удален
ИмяФайла = ПолучитьИмяВременногоФайла("xml");
ВыгрузитьДанные(ИмяФайла);
// Здесь должен быть код удаления, но его забыли или закомментировали

Как правильно организовать очистку в коде 1С

Чтобы избежать утечек дискового пространства, программист должен всегда гарантировать удаление временных файлов. Рассмотрим правильный шаблон реализации с использованием блока Попытка — Исключение:


ИмяВременногоФайла = ПолучитьИмяВременногоФайла("zip");
Попытка
    // Выполняем операции с файлом (например, обмен)
    ВыполнитьОбмен(ИмяВременногоФайла);
Исключение
    ЗаписьЖурналаРегистрации("ОбменДанными", УровеньЖурналаРегистрации.Ошибка, , , КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;

// Очистка должна выполняться в любом случае
Попытка
    УдалитьФайлы(ИмяВременногоФайла);
Исключение
    // Файл может быть занят другим процессом (например, антивирусом)
КонецПопытки;

Важный нюанс: Иногда разработчики комментируют строки с УдалитьФайлы() во время отладки, чтобы посмотреть содержимое передаваемого пакета, и забывают вернуть код в исходное состояние перед деплоем на рабочий сервер. Это и приводит к накоплению мусора.

Рекомендации по системной настройке сервера

Проанализируем методы, которые помогут минимизировать влияние проблемы на работоспособность всей ОС:

  1. Перенос временных папок на отдельный диск: Рекомендуется изменить переменные окружения TEMP и TMP для пользователя, под которым работает 1C:Enterprise Server Manager. Вынесите их на отдельный быстрый SSD или NVMe диск. Это гарантирует, что даже если папка переполнится, системный диск C: останется работоспособным и операционная система не "упадет".
  2. Автоматизация очистки через планировщик: Настройте Task Scheduler Windows на выполнение простого скрипта раз в сутки. Скрипт должен удалять файлы в папке Temp, дата изменения которых старше 24 часов. Это безопасный срок, так как активные сеансы вряд ли будут использовать столь старые временные данные.
  3. Настройка технологического журнала: Если причина роста неочевидна, настройте сбор событий EXCP (исключения). Часто файлы не удаляются из-за того, что процесс прерывается критической ошибкой до того, как управление доходит до команды удаления.

Почему файлы могут не удаляться автоматически?

Даже если в коде 1С всё написано верно, файлы могут "зависать" по следующим причинам:

Аварийное завершение процессов: Если процесс rphost завершился аварийно (дамп) или был принудительно "убит" администратором, механизмы самоочистки платформы не срабатывают.

Блокировки антивирусом: Антивирусное ПО может захватить файл для сканирования в тот момент, когда 1С пытается его удалить. В результате команда удаления игнорируется операционной системой.

Длительные транзакции: Файл будет оставаться заблокированным до тех пор, пока транзакция, в рамках которой он был создан, не будет зафиксирована или отменена.

Подводя итог, отметим: основным инструментом борьбы с ростом Temp является сочетание качественного кода (обязательное использование УдалитьФайлы) и административного контроля (мониторинг дискового пространства и автоматические скрипты очистки старых файлов).

← На главную