Многие администраторы серверов 1С при мониторинге дисковой активности замечают странное поведение: процесс ragent.exe (или rmngr.exe) начинает непрерывно записывать во временную папку файлы с расширением .tmp. Файлы имеют фиксированный размер около 12 000 000 байт (примерно 11.4 МБ), создаются каждые 5–10 секунд, после чего моментально удаляются. В масштабах года такая активность выливается в десятки терабайт записанных данных, что критически сокращает ресурс SSD-накопителей (параметр TBW). Разберемся, почему это происходит и как минимизировать негативные последствия для «железа».
Рассмотрим типичную ситуацию. На сервере под управлением Windows или Linux развернута современная платформа 1С:Предприятие 8.3 (чаще всего версии 8.3.23 и выше). В диспетчере задач или мониторе ресурсов мы видим следующую картину:
ragent создает файл вида v8_XXXX_XX.tmp во временном каталоге пользователя, под которым запущена служба 1С (например, USR1CV8).Проанализируем вызов системных функций. Стек вызова в момент записи часто указывает на библиотеки 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 МБ быстрее, считается более приоритетным для новых подключений. Тот факт, что это происходит даже на пустом сервере с одной базой, объясняется архитектурным единством: механизм балансировки работает всегда, чтобы быть готовым к появлению первого же пользователя.
Проведем несложный расчет, чтобы понять, насколько оправданы опасения системных администраторов. Возьмем среднюю частоту проверок — один раз в 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С нет штатной «галочки», позволяющей отключить эталонные вызовы или изменить их периодичность. Рассмотрим эффективные способы борьбы с износом дисков.
Поскольку временные файлы эталонного вызова живут доли секунды и не несут полезной информации, идеальным местом для них является оперативная память. Рассмотрим этот вариант подробнее:
TEMP и TMP пользователя, от имени которого работает 1С, на созданный RAM-диск.Важный момент: если вы используете RAM-диск, убедитесь, что его объема хватит для операций реструктуризации базы данных или выгрузки/загрузки .dt файлов, так как они тоже используют временную папку. Для крупных баз на время обслуживания может потребоваться временное переключение папок обратно на физический диск.
Если в сервере есть классические механические диски (HDD), износ которых от записи не критичен, можно перенести временные файлы туда. Рассмотрим, как это сделать без изменения глобальных настроек системы с помощью символьных ссылок:
Temp пользователя USR1CV8 (обычно это C:\Users\USR1CV8\AppData\Local\Temp).D:\1C_Temp).mklink /d:
mklink /d "C:\Users\USR1CV8\AppData\Local\Temp" "D:\1C_Temp"
Теперь 1С будет «думать», что пишет на системный диск, но фактически данные будут уходить на HDD.
Проанализируем опыт использования 1С на ОС Linux. В большинстве дистрибутивов каталог /tmp по умолчанию монтируется как tmpfs (виртуальная файловая система в оперативной памяти). В этом случае проблема износа диска исчезает сама собой, так как эталонные вызовы будут выполняться внутри RAM без обращения к контроллеру SSD.
Мы выяснили, что бесконечная запись файлов по 12 МБ — это не баг, а особенность механизма оценки производительности современных версий 1С. Хотя это решение выглядит технически спорным для систем с одним сервером, оно является частью общей логики масштабирования кластера. Чтобы уберечь свои SSD, администраторам следует заранее позаботиться о выносе временных файлов в оперативную память или на специализированные накопители.