Временные данные 1С:Предприятия — механизм платформы, папки на диске и чистка
Содержание
Временное хранилище 1С — это область памяти сеанса, куда платформа кладёт данные для передачи между клиентом и сервером: загруженный файл, табличный документ отчёта, картинку. Оно живёт, пока жив сеанс или форма, и чистится платформой само. Пользователи же под «временным хранилищем» обычно ищут другое: папки с временными файлами и кэшем на диске, которые разрастаются до гигабайтов и вызывают ошибки доступа.
Ниже оба смысла разведены. Для программиста — как работает механизм. Для администратора — где лежат временные файлы в Windows и Linux, что из них можно удалять, когда и как это автоматизировать.
Как устроены временные данные платформы
В 1С:Предприятии 8.3 есть три разных сущности, которые часто называют одним словом.
| Что | Где живёт | Кто очищает |
|---|---|---|
| Временное хранилище (механизм платформы) | Память сеанса, на сервере — в рабочем процессе rphost | Платформа: при закрытии формы или окончании сеанса |
| Временные файлы | Каталог %TEMP% пользователя или службы | Частично платформа, остальное — администратор |
| Кэш клиента и сервера | Профиль пользователя, каталог кластера | Платформа при перезапуске, вручную — администратор |
Временное хранилище в коде
Разработчик работает с ним тремя методами глобального контекста:
- 📥
ПоместитьВоВременноеХранилище(Данные, Адрес)— кладёт значение и возвращает строку-адрес; - 📤
ПолучитьИзВременногоХранилища(Адрес)— читает значение по адресу; - 🗑
УдалитьИзВременногоХранилища(Адрес)— освобождает место досрочно.
Второй параметр при помещении определяет срок жизни. Если передать уникальный идентификатор формы, данные удалятся при её закрытии. Если передать пустое значение или не передавать ничего, данные проживут до конца сеанса.
// На сервере: сформировали отчёт и отдали клиенту адрес
&НаСервере
Функция ПодготовитьФайл(ИдентификаторФормы)
ДвоичныеДанные = Новый ДвоичныеДанные(ПутьКФайлу);
Возврат ПоместитьВоВременноеХранилище(ДвоичныеДанные, ИдентификаторФормы);
КонецФункции
Если код в цикле кладёт в хранилище крупные файлы и привязывает их к сеансу, память рабочего процесса растёт до выхода пользователя. Вызывайте УдалитьИзВременногоХранилища сразу, как значение больше не нужно.
Проверить, что строка вообще является адресом хранилища, позволяет функция ЭтоАдресВременногоХранилища(). Если данные уже удалены, чтение по адресу вернёт Неопределено — это частая причина ошибок «значение не является объектом» в обработчиках, которые срабатывают после закрытия формы.
Где лежат временные файлы 1С в Windows
На рабочем месте платформа использует два места: системный каталог временных файлов и профиль пользователя.
Временные файлы. Платформа берёт системный %TEMP% текущего пользователя. Обычно это C:\Users\<имя>\AppData\Local\Temp. Файлы 1С узнаются по префиксу v8_ и расширению .tmp. Из кода путь возвращает функция КаталогВременныхФайлов().
Кэш клиента. Две папки с подкаталогами, у которых имена в виде GUID:
- 📁
%APPDATA%\1C\1cv8\— настройки и часть кэша, по подпапке на каждую базу; - 📁
%LOCALAPPDATA%\1C\1cv8\— кэш конфигурации, который платформа скачивает с сервера при первом входе.
Список баз хранится отдельно, в %APPDATA%\1C\1CEStart\ibases.v8i. Этот файл при чистке кэша не трогайте, иначе пользователь откроет пустой список баз.
На сервере 1С. Рабочие процессы rphost пишут временные файлы в %TEMP% учётной записи, под которой запущена служба агента (часто это USR1CV8). Отдельно лежит каталог кластера. Для установки по умолчанию на 64-битной платформе это C:\Program Files\1cv8\srvinfo\reg_1541\. Внутри — файлы реестра кластера, журналы регистрации баз и папки snccntx… с сеансовыми данными и кэшем.
Каталог srvinfo хранит реестр кластера (1CV8Clst.lst). Удалять из него можно только папки snccntx… и только при остановленной службе. Всё остальное не трогайте.
Временные файлы и кэш 1С в Linux
В Linux логика та же, меняются пути.
| Что | Путь по умолчанию |
|---|---|
| Временные файлы клиента | /tmp или каталог из переменной TMPDIR |
| Кэш и настройки клиента | ~/.1cv8/1C/1cv8/ |
| Список баз клиента | ~/.1C/1cestart/ibases.v8i |
| Каталог кластера сервера | /home/usr1cv8/.1cv8/1C/1cv8/reg_1541/ |
| Временные файлы рабочих процессов | /tmp пользователя usr1cv8 |
Две особенности, которых нет в Windows:
- 🐧
/tmpна многих дистрибутивах смонтирован какtmpfs, то есть лежит в оперативной памяти. Крупная выгрузка или формирование тяжёлого отчёта может съесть RAM сервера быстрее, чем диск. - 🔒 Права. Службу запускает
usr1cv8. Если каталог временных файлов создал root или другой пользователь, рабочий процесс не сможет туда писать, и это выльется в ошибку доступа при открытии отчёта или загрузке файла.
Свободное место и владельца каталога проверяют так:
df -h /tmp /home/usr1cv8
ls -ld /tmp /home/usr1cv8/.1cv8
du -sh /home/usr1cv8/.1cv8/1C/1cv8/reg_1541/snccntx*
Если TMPDIR нужно перенести на отдельный диск, задайте его в unit-файле службы srv1cv8 через строку Environment=TMPDIR=/data/1c-temp, затем выполните systemctl daemon-reload и перезапустите службу в нерабочее время.
Что регулирует консоль кластера
Отдельной настройки «размер временного хранилища» в консоли нет. Временные данные сеансов живут в памяти рабочих процессов, поэтому управляют ими через параметры рабочего сервера и процессов. Открывается это в консоли администрирования серверов: Кластеры → <кластер> → Рабочие серверы → <сервер> → Свойства.
Что смотреть в первую очередь:
- Допустимый объём памяти рабочих процессов. Когда суммарная память
rphostпревышает порог дольше заданного интервала, кластер перезапускает процесс. Сеансы перетекают на новый процесс, данные во временных хранилищах при этом теряются. - Интервал превышения допустимого объёма памяти. Слишком короткий интервал даёт частые перезапуски на пике нагрузки.
- Безопасный расход памяти за один вызов. Если один серверный вызов съел больше, его выполнение прерывается. Это защищает от кода, который кладёт в хранилище целую выгрузку базы.
В свойствах самого кластера есть интервал перезапуска рабочих процессов. Плановый перезапуск раз в сутки ночью — простой способ вернуть память, накопленную долгими сеансами.
Те же параметры доступны из командной строки через утилиту rac. Список кластеров выводит rac cluster list, сеансы — rac session list --cluster=<id>. Полный набор ключей для изменения параметров смотрите в справке rac help: он зависит от версии платформы.
Как очистить временные файлы и кэш 1С
Порядок — от безопасного к радикальному. Начинайте с первого пункта и переходите дальше, только если проблема осталась.
Сначала короткая шпаргалка, что можно удалять и когда.
| Объект | Удалять можно? | Условие |
|---|---|---|
Файлы v8_*.tmp в %TEMP% | Да | Старше суток; занятые система не отдаст |
GUID-папки в %APPDATA%\1C\1cv8 и %LOCALAPPDATA%\1C\1cv8 | Да | 1С у пользователя закрыта |
Файл ibases.v8i | Нет | Это список баз пользователя |
Папки snccntx… в каталоге кластера | Да | Служба агента остановлена |
Файлы .lst и GUID-каталоги баз в reg_1541 | Нет | Реестр кластера и журналы регистрации |
Первое, что стоит сделать, — оценить объём. В PowerShell размер временных файлов 1С текущего пользователя показывает команда:
Get-ChildItem $env:TEMP -Filter 'v8_*' -Recurse -ErrorAction SilentlyContinue | Measure-Object Length -Sum
Если там сотни мегабайт, начните с чистки %TEMP%. Если файлов мало, а проблема в странном поведении форм, — со сброса кэша.
Способ 1. Ключ /ClearCache
Самый мягкий вариант для одного пользователя. Добавьте в строку запуска базы в окне выбора ИБ (кнопка Изменить → последний шаг, поле «Дополнительные параметры запуска») ключ /ClearCache. Либо запустите из командной строки:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /ClearCache
Платформа сбросит кэш этой базы при входе. После успешного запуска ключ уберите, иначе каждый вход будет медленным.
Способ 2. Ручная чистка профиля пользователя
- Закройте все окна 1С у пользователя.
- Откройте
%APPDATA%\1C\1cv8\и удалите подпапки с именами вида GUID. - То же самое — в
%LOCALAPPDATA%\1C\1cv8\. - Откройте
%TEMP%и удалите файлыv8_*.tmp. Занятые файлы система не даст удалить — пропустите их.
Пользовательские настройки форм и отчётов в клиент-серверной базе хранятся в самой базе, поэтому их чистка профиля не сотрёт.
Способ 3. Сеансовые данные на сервере
Остановка службы агента обрывает все сеансы всех баз кластера. Делайте это только в согласованное окно, предупредив пользователей.
- Убедитесь, что пользователи вышли (
rac session listили список сеансов в консоли). - Остановите службу «Агент сервера 1С:Предприятия 8.3».
- Удалите папки
snccntx…внутриsrvinfo\reg_1541\. Сами каталоги баз (с GUID-именами) и файлы.lstне трогайте. - Очистите
%TEMP%учётной записи службы. - Запустите службу и проверьте вход в базу.
Автоматическая чистка по расписанию
Ручная чистка помогает один раз. Чтобы проблема не вернулась, поставьте удаление старых файлов в планировщик.
Windows. Скрипт удаляет временные файлы 1С старше 7 дней. Запускайте его от имени пользователя или службы, чей %TEMP% чистите, ночью:
@echo off
rem Временные файлы платформы старше 7 дней
forfiles /p "%TEMP%" /m v8_*.tmp /d -7 /c "cmd /c del /q @path" 2>nul
Добавьте задачу в «Планировщик заданий Windows» с триггером «Ежедневно» в 3:00 и условием «Выполнять, только если компьютер простаивает».
Linux. Для /tmp достаточно правила systemd-tmpfiles или строки в cron пользователя usr1cv8:
# crontab -u usr1cv8 -e
0 3 * * * find /tmp -maxdepth 1 -user usr1cv8 -name 'v8_*' -mtime +7 -delete
Срок в 7 дней выбран с запасом: живой сеанс не держит один временный файл неделю. Удаление занятого файла в Linux не ломает процесс, но место освободится только после его закрытия.
Кэш профилей (%APPDATA%, %LOCALAPPDATA%) по расписанию не чистите. Платформа после этого скачивает конфигурацию заново, и первый вход утром тормозит у всех сразу.
Ошибки и переполнение: как найти причину
Большинство проблем с временными файлами проявляется одним из четырёх способов. Выберите свой симптом.
Чтобы понять, кто именно забивает диск, в Windows удобно отсортировать %TEMP% по дате изменения. Если свежие файлы v8_* появляются пачками в одно и то же время, ищите регламентное задание или обработку, которая запускается по расписанию и не удаляет за собой выгрузки.
В Linux то же самое делает команда:
find /tmp -user usr1cv8 -name 'v8_*' -newermt '-1 hour' -printf '%TT %s %p\n' | sort
Если в коде есть ПолучитьИмяВременногоФайла(), после работы с файлом обязательно вызывайте УдалитьФайлы(). Платформа сама удаляет только те временные файлы, которые создала для себя, а не файлы, созданные кодом конфигурации или обработки.
Частые вопросы
Сколько данных можно положить во временное хранилище?
Сохранится ли содержимое хранилища после перезапуска сервера 1С?
Можно ли удалить всю папку 1cv8 в профиле пользователя?
ibases.v8i лежит в другой папке, 1CEStart, его не удаляйте.Почему в файловой базе тоже копятся временные файлы?
%TEMP% службы, уходит в %TEMP% пользователя.Нужно ли чистить временные файлы перед обновлением конфигурации?
/ClearCache обычно их снимает.