Почему ragent.exe терабайтами пишет мусорные файлы во временную папку и как это остановить

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

Многие администраторы серверов 1С при мониторинге дисковой активности замечают странное поведение: процесс ragent.exe (или rmngr.exe) начинает непрерывно записывать во временную папку файлы с расширением .tmp. Файлы имеют фиксированный размер около 12 000 000 байт (примерно 11.4 МБ), создаются каждые 5–10 секунд, после чего моментально удаляются. В масштабах года такая активность выливается в десятки терабайт записанных данных, что критически сокращает ресурс SSD-накопителей (параметр TBW). Разберемся, почему это происходит и как минимизировать негативные последствия для «железа».

Анализируем симптомы: что именно делает ragent.exe

Рассмотрим типичную ситуацию. На сервере под управлением Windows или Linux развернута современная платформа 1С:Предприятие 8.3 (чаще всего версии 8.3.23 и выше). В диспетчере задач или мониторе ресурсов мы видим следующую картину:

  1. Процесс ragent создает файл вида v8_XXXX_XX.tmp во временном каталоге пользователя, под которым запущена служба 1С (например, USR1CV8).
  2. В файл записывается ровно 12 000 000 байт данных. Содержимое файла представляет собой повторяющийся набор символов (алфавит, цифры и спецсимволы), что исключает эффективное сжатие или дедупликацию на лету.
  3. Файл считывается, обнуляется и удаляется практически мгновенно.
  4. Цикл повторяется каждые 2–5 секунд круглосуточно, даже если в базах нет ни одного активного пользователя.

Проанализируем вызов системных функций. Стек вызова в момент записи часто указывает на библиотеки core83.dll и rserver.dll. Если мы воспользуемся утилитой strace в Linux, мы увидим примерно следующую последовательность операций:


openat(AT_FDCWD, "/tmp/v8_QxzpGe_18139.tmp", O_RDWR|O_CREAT|O_TRUNC, 0660) = 21
write(21, "\377\0\1\2\3\4\5\6\7\10\t\n\v\f\r\16\17\20\21...", 12000000) = 12000000
read(21, "\377\0\1\2\3\4\5\6\7\10\t\n\v\f\r\16\17\20\21...", 12000000) = 12000000
close(21)
unlink("/tmp/v8_QxzpGe_18139.tmp")

Выясняем причину: механизм «Эталонного вызова»

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

Начиная с последних версий платформы, 1С использует сложный алгоритм балансировки нагрузки между рабочими процессами и серверами кластера, известный как Least Response Time (минимальное время отклика). Чтобы кластер мог оперативно решить, какому рабочему процессу rphost передать новое соединение клиента, он должен знать текущую производительность каждого сервера «в моменте».

Для этого менеджер кластера выполняет так называемый Эталонный вызов. Это синтетический тест производительности, который включает в себя:

Результаты этого замера формируют коэффициент производительности сервера. Тот сервер, который справился с записью 12 МБ быстрее, считается более приоритетным для новых подключений. Тот факт, что это происходит даже на пустом сервере с одной базой, объясняется архитектурным единством: механизм балансировки работает всегда, чтобы быть готовым к появлению первого же пользователя.

Оцениваем масштаб ущерба для SSD

Проведем несложный расчет, чтобы понять, насколько оправданы опасения системных администраторов. Возьмем среднюю частоту проверок — один раз в 5 секунд.

12 МБ * 12 раз в минуту = 144 МБ в минуту.
144 МБ * 60 минут = 8 640 МБ (около 8.4 ГБ) в час.
8.4 ГБ * 24 часа = 201.6 ГБ в сутки.
201.6 ГБ * 365 дней = 73 584 ГБ (около 72 ТБ) в год.

Для серверных SSD корпоративного класса (Enterprise) с высоким ресурсом это незначительная величина. Однако для бюджетных накопителей или системных дисков обычных серверов с ресурсом (TBW) в районе 150–300 ТБ, такая «фоновая» работа 1С может уничтожить диск за 2–3 года эксплуатации, не учитывая полезную нагрузку от баз данных и журналов регистрации.

Варианты решения проблемы

К сожалению, в настройках кластера 1С нет штатной «галочки», позволяющей отключить эталонные вызовы или изменить их периодичность. Рассмотрим эффективные способы борьбы с износом дисков.

Способ 1. Использование RAM-диска (рекомендуется)

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

  1. Установим любую программу для создания RAM-дисков (например, ImDisk или аналоги).
  2. Выделим небольшой объем памяти (достаточно 512 МБ или 1 ГБ, чтобы хватило и для других нужд системы).
  3. В переменных окружения Windows (или в настройках службы 1С под Linux) перенаправим переменные TEMP и TMP пользователя, от имени которого работает 1С, на созданный RAM-диск.

Важный момент: если вы используете RAM-диск, убедитесь, что его объема хватит для операций реструктуризации базы данных или выгрузки/загрузки .dt файлов, так как они тоже используют временную папку. Для крупных баз на время обслуживания может потребоваться временное переключение папок обратно на физический диск.

Способ 2. Перенос временных папок на HDD

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

  1. Остановим службу 1С:Предприятие.
  2. Найдем папку Temp пользователя USR1CV8 (обычно это C:\Users\USR1CV8\AppData\Local\Temp).
  3. Удалим содержимое или переместим папку на другой диск (например, D:\1C_Temp).
  4. Создадим символьную ссылку с помощью команды mklink /d:

mklink /d "C:\Users\USR1CV8\AppData\Local\Temp" "D:\1C_Temp"

Теперь 1С будет «думать», что пишет на системный диск, но фактически данные будут уходить на HDD.

Способ 3. Переход на Linux

Проанализируем опыт использования 1С на ОС Linux. В большинстве дистрибутивов каталог /tmp по умолчанию монтируется как tmpfs (виртуальная файловая система в оперативной памяти). В этом случае проблема износа диска исчезает сама собой, так как эталонные вызовы будут выполняться внутри RAM без обращения к контроллеру SSD.

Заключение

Мы выяснили, что бесконечная запись файлов по 12 МБ — это не баг, а особенность механизма оценки производительности современных версий 1С. Хотя это решение выглядит технически спорным для систем с одним сервером, оно является частью общей логики масштабирования кластера. Чтобы уберечь свои SSD, администраторам следует заранее позаботиться о выносе временных файлов в оперативную память или на специализированные накопители.

← На главную