Чистим кэш кластера 1С на сервере: что удалять, а что трогать нельзя

· 9 мин

Содержание

Чтобы почистить кэш серверной базы 1С, остановите службу «Агент сервера 1С:Предприятия», удалите в каталоге кластера (srvinfo) папки snccntx_* и временные файлы учётной записи службы, затем запустите службу снова. Сам реестр кластера и каталоги баз reg_1541 трогать нельзя.

Зачем это нужно? Типичные симптомы: после обновления конфигурации пользователи видят старые формы, база «подтормаживает» без видимых причин, рабочие процессы разрастаются в памяти, а перезапуск клиента не помогает. Ниже — порядок действий от безопасного к радикальному и готовый скрипт, чтобы не делать всё руками.

Что именно кэшируется на сервере 1С и когда это мешает

У клиент-серверной базы кэш лежит в двух местах: на компьютерах пользователей и на самом сервере. Чистка клиентского кэша (папки 1cv8 в профиле пользователя) серверную проблему не решает. Нужно смотреть на сервер.

На сервере 1С кэшируется несколько вещей:

  • 🗂 Данные сеансов — каталоги snccntx_* внутри папки базы в кластере. Хранят служебные данные подключённых сеансов.
  • 📦 Кэш метаданных и модулей — рабочие процессы держат разобранные модули в памяти и частично на диске.
  • 🧾 Временные файлы — то, что рабочие процессы пишут во временный каталог учётной записи, под которой запущена служба.
  • 🔎 Индексы полнотекстового поиска — отдельная история, их не чистят «заодно».

Чистка помогает, когда:

  1. после обновления конфигурации или расширения сервер ведёт себя так, будто изменений нет;
  2. появляются ошибки вида Ошибка загрузки модуля или Неверный формат потока без явной причины;
  3. каталог кластера занимает гигабайты, а баз в нём немного;
  4. рабочие процессы rphost держат память и не отдают её даже ночью.

Если тормозит только у одного пользователя, виноват, скорее всего, его клиентский кэш или сеть. Серверный кэш в этом случае не трогайте.

Перед началом: бэкап, окно работ и остановка службы

Работы на сервере прервут всех пользователей, поэтому согласуйте окно с руководителем и предупредите людей. Вечер или выходной — лучший вариант.

Перед удалением любых файлов сделайте копию каталога кластера или хотя бы выгрузите базы в .dt. Откат из копии занимает минуты, а восстановление после случайного удаления реестра — часы.

Порядок подготовки:

  1. Выгрузите информационные базы (Конфигуратор → «Администрирование» → «Выгрузить информационную базу»).
  2. Узнайте, где лежит каталог кластера. В консоли администрирования откройте свойства «Центральных серверов» — там указан каталог запуска. На Windows он обычно называется srvinfo, на Linux — внутри домашнего каталога пользователя usr1cv8.
  3. Завершите сеансы пользователей (раздел «Сеансы» в консоли кластера) или попросите всех выйти.
  4. Остановите службу.

Для Windows остановка из PowerShell выглядит так (имя службы подставьте своё — найдите его командой Get-Service *1C*):

Stop-Service -Name "1C:Enterprise 8.3 Server Agent (x86-64)" -Force

Для Linux:

sudo systemctl stop srv1cv83

Проверьте, что процессы действительно остановились. В диспетчере задач не должно остаться ragent, rmngr и rphost. Если какой-то завис — завершите его вручную. Пока процессы живы, файлы будут заняты, а часть из них вы удалите «вживую», получив рассинхронизацию.

Где лежит кэш и какие файлы можно удалять

Откройте каталог кластера. Структура примерно такая:

srvinfo\
  reg_1541\
    1CV8Clst.lst
    <GUID базы>\
      1Cv8Reg.lgd
      snccntx_...\
      ...
  ...

Номер 1541 — порт главного менеджера кластера, у вас он может быть другим (например, reg_1641).

ЧтоМожно удалятьКомментарий
snccntx_* внутри папок базДаДанные сеансов, пересоздаются при запуске
Временные файлы учётной записи службыДаСодержимое, а не сам каталог
1CV8Clst.lstНетСписок баз и настроек кластера
1Cv8Reg.lgd и другие файлы журнала регистрацииНет, пока не нужноЭто журнал, а не кэш
Каталоги индекса полнотекстового поискаНетПосле удаления индекс придётся строить заново
Файлы .lst, .dat в корне reg_*НетРеестр кластера

Если не уверены в файле — не удаляйте. Переместите в соседнюю папку и проверьте работу.

Ошибка «почистил всё в srvinfo» — самая дорогая. Вместе с кэшем исчезают регистрации баз, настройки кластера и журналы. Базы придётся подключать к кластеру заново.

Временный каталог службы

Рабочие процессы пишут временные файлы туда, где живёт профиль учётной записи службы.

  • Windows, служба под локальной системой — системный каталог временных файлов.
  • Windows, служба под пользователем usr1cv8 — C:\Users\usr1cv8\AppData\Local\Temp.
  • Linux — /tmp и каталог ~/.1cv8 пользователя usr1cv8.

Удаляйте содержимое каталога, но не сам каталог. Файлы, занятые другим процессом, система не даст стереть — это нормально.

Клиентский кэш на сервере

Если на сервере запускаются клиентские сеансы (например, фоновые задания через 1cv8.exe или RDP-пользователи), у них есть свой кэш в профиле:

  • %APPDATA%\1C\1cv8
  • %LOCALAPPDATA%\1C\1cv8

Эти каталоги чистят отдельно, под нужным пользователем, при закрытых клиентах.

Пошаговая очистка вручную

Служба остановлена, бэкап есть. Дальше по шагам.

  1. Откройте каталог кластера, затем reg_1541 и папку нужной базы. Её имя — это идентификатор базы, сопоставить его с названием можно в консоли по свойствам базы.
  2. Найдите каталоги snccntx_*. Удалите их.
  3. Если работаете с несколькими базами и проблема общая — повторите для каждой папки базы.
  4. Откройте временный каталог учётной записи службы и очистите его содержимое.
  5. Запустите службу.

Windows:

Start-Service -Name "1C:Enterprise 8.3 Server Agent (x86-64)"

Linux:

sudo systemctl start srv1cv83
  1. Подождите минуту-две, пока поднимутся rmngr и rphost и откройте базу.

Первый вход будет медленнее обычного. Это нормально: сервер заново разбирает модули и строит кэш. Если база открылась и формы показывают актуальную конфигурацию, цель достигнута.

Если после старта база не открывается с ошибкой доступа к кластеру, проверьте права учётной записи службы на каталог srvinfo. Часто их теряют при копировании каталога под другим пользователем.

Очистка без остановки службы: через консоль кластера

Остановить сервер не всегда можно. Тогда используйте мягкий вариант — сбросить рабочие процессы и сеансы из консоли администрирования серверов 1С. Он не удалит файлы, но освободит память и заставит процессы заново прочитать конфигурацию.

Что можно сделать:

  • Завершить сеансы базы. В дереве кластера откройте «Информационные базы» → нужная база → «Сеансы», выделите все и завершите.
  • Перезапустить рабочие процессы. В разделе «Рабочие серверы» → «Рабочие процессы» завершите нужный процесс rphost. Менеджер кластера поднимет новый.
  • Настроить автоперезапуск. В свойствах кластера есть параметры «Интервал перезапуска» рабочих процессов, «Допустимый объём памяти» и «Интервал превышения допустимого объёма памяти». Они заставляют rphost перезапускаться сами, когда разрастаются.

Пример разумных значений для сервера с 32 ГБ памяти и 100–150 пользователями: перезапуск раз в сутки (86400 секунд) и допустимый объём памяти порядка 8–10 ГБ на процесс. Точные цифры зависят от нагрузки: смотрите, сколько реально занимает rphost в пиковые часы, и берите значение с запасом.

Завершение рабочего процесса обрывает сеансы, которые на нём работали. Пользователи потеряют несохранённые данные. Делайте это в нерабочее время.

Сравнение способов:

СпособПростой для пользователейЧто очищаетсяРиск
Сброс сеансов и процессов в консолиКороткийПамять и сеансовые данныеНизкий
Остановка службы + удаление snccntx_*Полный, на время работФайловый кэш сеансов и временные файлыСредний, если ошибиться в каталоге
Полная пересборка кластераДлительныйВсё, включая настройкиВысокий

Полную пересборку кластера оставьте на крайний случай, когда мягкие способы не сработали, а симптомы остались.

Автоматизация: скрипт ночной очистки

Если кэш приходится чистить регулярно, оформите это скриптом и повесьте на планировщик. Ниже — пример для Windows. Пути и имя службы замените на свои.

$svc    = "1C:Enterprise 8.3 Server Agent (x86-64)"
$srv    = "D:\srvinfo\reg_1541"
$logDir = "D:\scripts\logs"
$log    = Join-Path $logDir ("clean_" + (Get-Date -Format "yyyyMMdd") + ".log")

New-Item -ItemType Directory -Force -Path $logDir | Out-Null
"Старт: $(Get-Date)" | Out-File $log -Append

Stop-Service -Name $svc -Force
Start-Sleep -Seconds 20

# Принудительно завершаем зависшие процессы кластера
Get-Process ragent,rmngr,rphost -ErrorAction SilentlyContinue | Stop-Process -Force

# Удаляем каталоги данных сеансов
Get-ChildItem -Path $srv -Recurse -Directory -Filter "snccntx_*" |
    ForEach-Object {
        "Удаляю: $($_.FullName)" | Out-File $log -Append
        Remove-Item $_.FullName -Recurse -Force -ErrorAction SilentlyContinue
    }

Start-Service -Name $svc
"Готово: $(Get-Date)" | Out-File $log -Append

Что стоит сделать вокруг скрипта:

  • ✅ запустите его вручную один раз и посмотрите журнал, прежде чем вешать на расписание;
  • ✅ поставьте запуск на ночь и не чаще одного раза в сутки;
  • ✅ добавьте в начало копирование reg_1541 в архивную папку, если места хватает;
  • ✅ следите за размером журнала, чтобы он сам не превратился в мусор.

Для Linux логика та же: systemctl stop, find по маске snccntx_*, systemctl start. Запуск — через cron или systemd timer.

#!/bin/bash
SRV="/home/usr1cv8/.1cv8/1C/1cv8/srvinfo"
systemctl stop srv1cv83
sleep 20
find "$SRV" -type d -name 'snccntx_*' -exec rm -rf {} +
systemctl start srv1cv83

Путь к srvinfo в вашей установке может отличаться — сверьте его в свойствах кластера, а не копируйте вслепую.

Перед запуском чистки
Выполнено: 0 / 5

После очистки: что проверить и как настроить сервер

Чистка снимает симптом. Чтобы он не вернулся, посмотрите на причины.

Быстрая проверка результата

  1. Запустите базу под обычным пользователем и откройте тяжёлую форму (например, отчёт или журнал документов ).
  2. Сравните время открытия с тем, что было до чистки.
  3. В консоли кластера посмотрите, сколько памяти занимает rphost через час работы, и ещё раз вечером.
  4. Если вы обновляли конфигурацию — убедитесь, что формы показывают новые реквизиты.

Параметры, которые стоит пересмотреть

  • Память под рабочие процессы. Если rphost растёт до предела и не отпускает, настройте автоперезапуск (см. выше).
  • Число рабочих процессов и баз на процесс. Одна тяжёлая база на отдельном процессе не мешает остальным. Менять настройки лучше постепенно, смотря на нагрузку.
  • Место на диске. Каталог кластера и временный каталог не должны делить диск с базой данных СУБД. Нехватка места на системном диске ломает кэш незаметнее всего.
  • Журнал регистрации. Если 1Cv8Reg.lgd или каталог 1Cv8Log разрослись, настройте разделение журнала по периодам и храните старые периоды отдельно.

Если после очистки проблема вернулась через день-два, чистка — не лекарство. Ищите утечку памяти в конкретном модуле или внешней обработке, а не повторяйте чистку по расписанию вечно.

Если после чистки что-то пошло не так

Разберём типовые ситуации.

Диагностика: выберите симптом

Частые вопросы

Можно ли чистить кэш сервера, пока пользователи работают?
Файлы — нет. Остановка службы прерывает все сеансы. В рабочее время можно разве что завершить отдельные сеансы или перезапустить один рабочий процесс.
Пропадут ли данные в базе после очистки кэша?
Нет. Данные хранятся в СУБД, а кэш содержит служебную информацию, которая создаётся заново. Но бэкап всё равно сделайте: ошибка в выборе каталога может задеть и нужные файлы.
Как часто нужно чистить кэш серверной базы?
По необходимости, а не по календарю. Если вы чистите раз в неделю, чтобы всё работало, ищите причину: утечку памяти, переполненный диск или проблемный модуль.
Чем кэш сервера отличается от кэша клиента?
Клиентский кэш лежит в профиле пользователя и хранит настройки форм и метаданные для конкретного компьютера. Серверный относится к кластеру и общий для всех подключений.
Нужно ли перезагружать весь сервер?
Обычно нет. Достаточно перезапустить службу агента 1С. Перезагрузка ОС нужна, если процессы не завершаются или система нестабильна.
Безопасно ли удалять каталог с `snccntx_`?
Да, когда служба остановлена. Каталоги данных сеансов создаются заново при следующем подключении.