Рішення проблеми з витоками пам'яті робочих процесів сервера 1С Підприємства засобами операційної системи.
Відомо, що при функціонуванні робочих процесів сервера 1С Підприємства 8.1 rphost.exe існує наступна проблема: через особливості платформи, з підключенням кожного нового клієнта до робочого процесу, збільшується розмір займаної робочим процесом оперативної пам'яті. При цьому, при відключенні клієнта, яку він обіймав при підключенні обсяг не звільняється. Так само обсяг пам'яті, займаний робочим процесом може збільшуватися при виконанні програмного коду. Така поведінка називається "Витік пам'яті" або "Memory Leaks". У підсумку, коли обсяг займаної пам'яті процесом rphost.exe виростає більше опеределения межі (в моєму випадку це було> 1Gb), робочий процес безумовно перезапускается. Зрозуміло, що клієнти, підключені до цього процесу, отримують повідомлення, що з'єднання з сервером розірвано, припиняють роботу і змушені перепідключатися. Залежно від кількості користувачів і кількості запущених робочих процесів, дана проблема виникає з тією або іншою частотою. У моєму випадку - користувачів близько 60 і один робочий процес, подібна ситуація виникала до 5 разів на тиждень. Тобто ні про яку стабільну роботу системи 1С Підприємство в цьому випадку мова не йде.
Першим кроком вирішення проблеми було - збільшити кількість робочих процесів, що і було зроблено. Однак, проблему це вирішило лише частково, перезапуски робочих процесів стали відбуватися рідше, але не зникли зовсім.
Другий і цілком логічний крок - автоматичний перезапуск процесів на сервері, про що, власне, і хочеться написати.
Оскільки служба агента сервера 1С Підприємства є стандартною службу, в арсеналі Windows є стандартний спосіб зупинки і запуску служб з командного рядка командами net stop і net start. Досить ці команди лише включити в bat-файл і налаштувати шедулера на запуск bat-файлу за розкладом, я налаштував перезапуск один раз на добу, в нічний час. Слід мати на увазі, що якщо перезапускати робочі процеси в робочий час, всі підключені до сервера 1С Підприємства клієнти будуть відключені!
Крім того, щоб трохи рознести за часом команди зупинки і запуску служби, будемо використовувати відому утиліту sleep.exe, яку легко знайти в Мережі.
Приблизний текст bat-файлу restart1c.bat:
rem @echo off
rem \\ ----- початок скрипт зупинки і запуску агента сервера 1С Підприємства ---- \\
set logfile = "stopstartlog.txt"
set timeout = 20
echo .ate%% time% >>% logfile%
net stop "1C: Enterprise 8.1 Server Agent" >>% logfile%
c: \ scripts \ sleep% timeout%
echo .ate%% time% >>% logfile%
net start "1C: Enterprise 8.1 Server Agent" >>% logfile%
c: \ scripts \ sleep% timeout%
rem \\ ----- кінець скрипт зупинки і запуску агента сервера 1С Підприємства ---- \\
Пояснення використовуваних змінних і команд:
* Logfile - файл stopstartlog.txt, куди будуть записуватися результати виконання команд, розміщується в тому ж каталозі, що і сам bat-файл;
** timeout - час в секундах;
*** c: \ scripts - каталог, де передбачається розмістити програму sleep.exe, bat-файл і лог-файл;
З цього ж bat-файлу можна відразу після перезапуску процесів запускати скрипт бекапа засобами 1С Підприємства. В цьому випадку у вас гарантовано не буде підключений жоден клієнт.
Необхідна ремарка: у користувача, під яким буде виконуватися завдання по перезапуску служби повинні бути відповідні права на зупинку і запуск служб сервера.
- матеріали форуму www.mista.ru;
- Документація по платформі 1С Підприємство 8.1;
- Документація по продуктах MS Windows;