АдминистрированиеРабочийСервер.БезопасныйРасходПамятиРабочихПроцессов

Свойства · WorkProcessSafeMemoryUsage

Тип: Число. Определяет размер максимального объема памяти рабочих процессов. Суммарный объем виртуального адресного пространства, занимаемого всеми рабочими процессами этого кластера на данном рабочем сервере, превышение которого может привести к снижению производительности рабочего сервера. Допустимые значения от -1 до 9223372036854775807. Если значение 0, то максимальный объем памяти рабочих процессов определяется автоматически как 80% объема оперативной памяти рабочего сервера. Если значение -1, то максимальный объем памяти рабочих процессов не ограничен.

Полное описание, параметры и ограничения

АдминистрированиеРабочийСервер.БезопасныйРасходПамятиРабочихПроцессов (AdministrationWorkServer.WorkProcessSafeMemoryUsage)

АдминистрированиеРабочийСервер (AdministrationWorkServer)

БезопасныйРасходПамятиРабочихПроцессов (WorkProcessSafeMemoryUsage)

Не рекомендуется использовать, начиная с версии 8.3.15.

Доступен, начиная с версии 8.3.14.

Использование:
Чтение и запись.
Описание:
Тип: Число.
Определяет размер максимального объема памяти рабочих процессов.
Суммарный объем виртуального адресного пространства, занимаемого всеми рабочими процессами этого кластера на данном рабочем сервере, превышение которого может привести к снижению производительности рабочего сервера.
Допустимые значения от -1 до 9223372036854775807.
Если значение 0, то максимальный объем памяти рабочих процессов определяется автоматически как 80% объема оперативной памяти рабочего сервера.
Если значение -1, то максимальный объем памяти рабочих процессов не ограничен.
Доступность:

Тонкий клиент, сервер, толстый клиент, интеграция.

Использование в версии:

Доступен, начиная с версии 8.3.14.

Не рекомендуется использовать, начиная с версии 8.3.15.

Описание изменено в версии 8.3.15.

Методическая информация

Практические примеры

Различить пороги памяти своего рабочего сервера

Сравниваем настройки безопасного вызова, всех рабочих процессов, временного и критического объёма. Сохраняем сырые значения и различаем автоматический ноль от особого -1.

Где и как запускать

Полный модуль собственной управляемой формы учебной обработки. Читает только явно выбранный УчебныйКластер85 через свой loopback ras, если вы сами запускаете его на стенде.

Подготовка

  1. Нужен отдельный собственный серверный стенд 1С 8.5.1.1343 без рабочих баз. Администратор должен заранее установить сервер, запустить совместимый ras и создать кластер с точным именем УчебныйКластер85. Код ничего не устанавливает и не регистрирует.

  2. Запускайте обработку в собственной пустой учебной конфигурации с именем метаданных УчебнаяКонфигурацияСинтаксиса. Серверное выполнение должно находиться на той же машине, что собственный ras: код разрешает только 127.0.0.1. Это адрес сервера выполнения, не обязательно компьютера тонкого клиента.

  3. Создайте учебную обработку с управляемой формой. Добавьте реквизиты формы: ПортRAS — Число без дробной части; ИмяАгента, ПарольАгента, ИдентификаторКластера, ИмяАдминистратораКластера, ПарольАдминистратораКластера, JSONРезультат — Строка. У JSONРезультат длина 0, то есть неограниченная. ИмяАдминистратораКластера — логин, а не имя кластера.

  4. Выведите поля на форму. Для элементов ПарольАгента и ПарольАдминистратораКластера включите Режим пароля; не сохраняйте их значения в настройках и истории. Для JSONРезультат используйте многострочное поле строки только для просмотра. Маскировка ввода не шифрует пароль и не заменяет защищённый стенд.

  5. Создайте команду ПолучитьУчебныйСнимок, назначьте ей клиентский обработчик с таким же именем и вставьте весь приведённый модуль формы. Другие процедуры команд, общий модуль или готовые неизвестные объекты не нужны.

  6. ПортRAS возьмите из фактического запуска своего ras, не из порта ragent или рабочего процесса. Например, 1545 подходит только если именно этот порт настроен на вашем стенде. Используйте законные учётные данные своего агента и своего кластера; пустые допустимы только для намеренно настроенного учебного стенда без соответствующих администраторов.

  7. В первый раз оставьте ИдентификаторКластера пустым: появится JSON только с кластерами УчебныйКластер85. Скопируйте настоящий UUID из результата, вновь введите очищенные пароли и повторите команду. Кластер выбирается одновременно по UUID и точному учебному имени; чужой кластер не принимается.

  8. Выполняйте каждый урок отдельно. JSON формируется в памяти и показывается только на своей форме; код не сохраняет файлы, не пишет настройки кластера, не прерывает сеансы и не запускает команды ОС. Он выполняет сетевое обращение к своему локальному ras только если вы сами запустите его на подготовленном стенде.

  9. Здесь подключение к ras и запуск в 1С не выполнялись. Проверены тексты, сигнатуры и привязки к локальной справке 8.5.1.1343. Пройдите контрольные действия сами только на своём учебном стенде.

&НаКлиенте
Процедура ПолучитьУчебныйСнимок(Команда)
    Попытка
        JSONРезультат = УчебныйСнимокНаСервере(ПортRAS, ИмяАгента, ПарольАгента,
            ИдентификаторКластера, ИмяАдминистратораКластера, ПарольАдминистратораКластера);
    Исключение
        JSONРезультат = "Снимок не получен. Проверьте собственный стенд, порт, UUID, учебное имя и права. Подробную серверную ошибку исследуйте в отладчике без публикации учётных данных.";
    КонецПопытки;
    ПарольАгента = "";
    ПарольАдминистратораКластера = "";
КонецПроцедуры

&НаСервереБезКонтекста
Функция УчебныйСнимокНаСервере(ПортRAS, ИмяАгента, ПарольАгента,
    ИдентификаторКластера, ИмяАдминистратораКластера, ПарольАдминистратораКластера)
    Если ТипЗнч(ПортRAS) <> Тип("Число") Тогда
        ВызватьИсключение "Порт ras должен быть числом";
    КонецЕсли;
    Если ПортRAS <> Цел(ПортRAS) Или ПортRAS < 1 Или ПортRAS > 65535 Тогда
        ВызватьИсключение "Недопустимый порт собственного ras";
    КонецЕсли;
    ТекстовыеПараметры = Новый Массив;
    ТекстовыеПараметры.Добавить(ИмяАгента);
    ТекстовыеПараметры.Добавить(ПарольАгента);
    ТекстовыеПараметры.Добавить(ИдентификаторКластера);
    ТекстовыеПараметры.Добавить(ИмяАдминистратораКластера);
    ТекстовыеПараметры.Добавить(ПарольАдминистратораКластера);
    Для Каждого ТекстовыйПараметр Из ТекстовыеПараметры Цикл
        Если ТипЗнч(ТекстовыйПараметр) <> Тип("Строка") Тогда
            ВызватьИсключение "Учётные данные и UUID должны быть строками";
        КонецЕсли;
    КонецЦикла;
    Агент = Новый АдминистрированиеСервера("127.0.0.1", ПортRAS);
    Агент.ВыполнитьАутентификацию(ПарольАгента, ИмяАгента);
    Кластеры = Агент.ПолучитьКластеры();
    Если ПустаяСтрока(СокрЛП(ИдентификаторКластера)) Тогда
        Каталог = Новый Массив;
        Для Каждого Найденный Из Кластеры Цикл
            Если Найденный.Имя = "УчебныйКластер85" Тогда
                СтрокаКаталога = Новый Структура;
                СтрокаКаталога.Вставить("UUID", Строка(Найденный.ИдентификаторКластера));
                СтрокаКаталога.Вставить("Имя", Найденный.Имя);
                Каталог.Добавить(СтрокаКаталога);
            КонецЕсли;
        КонецЦикла;
        Возврат СериализоватьСвойСнимок(Новый Структура("УчебныеКластеры", Каталог));
    КонецЕсли;
    Кластер = Неопределено;
    Совпадений = 0;
    Для Каждого Найденный Из Кластеры Цикл
        Если НРег(Строка(Найденный.ИдентификаторКластера)) = НРег(СокрЛП(ИдентификаторКластера))
            И Найденный.Имя = "УчебныйКластер85" Тогда
            Кластер = Найденный;
            Совпадений = Совпадений + 1;
        КонецЕсли;
    КонецЦикла;
    Если Совпадений <> 1 Тогда
        ВызватьИсключение "Нужен один собственный учебный кластер с подтверждённым UUID";
    КонецЕсли;
    Кластер.ВыполнитьАутентификацию(ИмяАдминистратораКластера, ПарольАдминистратораКластера);
    Снимок = Новый Структура;
    Снимок.Вставить("UUIDКластера", Строка(Кластер.ИдентификаторКластера));
    Снимок.Вставить("ИмяКластера", Кластер.Имя);
    Серверы = Новый Массив;
    Для Каждого Рабочий Из Кластер.ПолучитьРабочиеСерверы() Цикл
        СтрокаСервера = Новый Структура;
        СтрокаСервера.Вставить("UUID", Строка(Рабочий.ИдентификаторРабочегоСервера));
        СтрокаСервера.Вставить("Имя", Рабочий.Имя);
        СтрокаСервера.Вставить("ИмяКомпьютера", Рабочий.ИмяКомпьютера);
        СтрокаСервера.Вставить("БезопасныйРасходПамятиЗаОдинВызов", Рабочий.БезопасныйРасходПамятиЗаОдинВызов);
        СтрокаСервера.Вставить("БезопасныйРасходПамятиРабочихПроцессов", Рабочий.БезопасныйРасходПамятиРабочихПроцессов);
        СтрокаСервера.Вставить("ВременноДопустимыйОбъемПамятиПроцессов", Рабочий.ВременноДопустимыйОбъемПамятиПроцессов);
        СтрокаСервера.Вставить("КритическийОбъемПамятиПроцессов", Рабочий.КритическийОбъемПамятиПроцессов);
        СтрокаСервера.Вставить("ОграничениеОбъемаПамятиРабочихПроцессов", Рабочий.ОграничениеОбъемаПамятиРабочихПроцессов);
        СтрокаСервера.Вставить("ПериодПревышенияВременноДопустимогоОбъемаПамятиПроцессов", Рабочий.ПериодПревышенияВременноДопустимогоОбъемаПамятиПроцессов);
        СтрокаСервера.Вставить("БезопасныйВызовАвтоматический", Рабочий.БезопасныйРасходПамятиЗаОдинВызов = 0);
        СтрокаСервера.Вставить("МаксимумРабочихАвтоматический", Рабочий.БезопасныйРасходПамятиРабочихПроцессов = 0);
        СтрокаСервера.Вставить("КритическийОбъемАвтоматический", Рабочий.КритическийОбъемПамятиПроцессов = 0);
        Если Рабочий.БезопасныйРасходПамятиЗаОдинВызов > 0 Тогда
            СтрокаСервера.Вставить("БезопасныйВызовMiB", Рабочий.БезопасныйРасходПамятиЗаОдинВызов / 1024 / 1024);
        КонецЕсли;
        Серверы.Добавить(СтрокаСервера);
    КонецЦикла;
    Снимок.Вставить("РабочиеСерверы", Серверы);
    Возврат СериализоватьСвойСнимок(Снимок);
КонецФункции

&НаСервереБезКонтекста
Функция СериализоватьСвойСнимок(Снимок)
    Писатель = Новый ЗаписьJSON;
    Писатель.УстановитьСтроку();
    ЗаписатьJSON(Писатель, Снимок);
    Возврат Писатель.Закрыть();
КонецФункции

Разбор по шагам

  1. Проверка имени учебной конфигурации и числового порта выполняется до создания соединения. Удалённый адрес не принимается: 127.0.0.1 записан в серверном коде.

  2. У агента порядок аутентификации — пароль, имя; у кластера — имя, пароль. Два вызова имеют разные контракты и не взаимозаменяемы.

  3. Пустой UUID запускает только каталог собственных учебных кластеров. Повторный запуск выбирает один кластер по реальному UUID и точному имени, не первый элемент массива.

  4. В JSON попадают только явно перечисленные диагностические поля. Объект администрирования целиком не сериализуется; пароли и сырая ошибка аутентификации не выводятся.

  5. После любого исхода клиент очищает два поля пароля. Для следующего запуска их нужно вводить заново; остальные параметры и результат остаются на своей форме.

  6. Настройки получаем из реальных описаний рабочих серверов выбранного кластера; пустая коллекция честно остаётся пустой.

  7. БезопасныйРасходПамятиЗаОдинВызов документирован в байтах. Только положительное значение переводим в MiB; ноль и -1 не делим как объём памяти.

  8. Ноль у безопасного расхода одного вызова означает автоматическое значение 5% максимума рабочих процессов; -1 означает, что при достигнутом максимуме любой вызов считается опасным, а не отсутствие ограничения.

  9. У максимума рабочих процессов ноль означает автоматические 80% физической RAM, у критического объёма — 95%. Их -1 означает отсутствие соответствующего ограничения; это другая семантика, чем -1 у безопасного вызова.

  10. Период превышения временного объёма действует при ненулевом периоде и временном объёме, отличном от -1. ОграничениеОбъемаПамятиРабочихПроцессов связано с отказом запуска новых рабочих процессов, не с тем же действием, что критический порог.

Как проверить результат

  1. В JSON сохранены реальные исходные числа и три флага автоматического режима. Сопоставьте их со своей консолью, ничего не меняя.

  2. БезопасныйВызовMiB появляется только для положительного значения байтового порога. Для 0 или -1 этого производного ключа нет.

  3. Объясните разницу -1 у безопасного вызова и у максимума рабочих процессов. Нельзя объявить оба случая режимом без ограничений.

Ожидаемый результат

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

На что обратить внимание

  1. Имя и loopback-адрес — защитные условия учебного сценария, не замена правам администратора и сетевой защите. Не переименовывайте рабочий кластер ради обхода проверки.

  2. Свойства настроек могут быть записываемыми, но этот урок их только читает. Нет Записать, Удалить, Прервать или Отключить и нет автоматического исправления конфигурации.

  3. Снимок меняется со временем. Пустая коллекция и нулевое показание имеют разные причины; проверяйте подготовку, включённые метрики и интервалы наблюдения.

  4. Расширенная серверная ошибка может содержать чувствительные сведения. Клиент показывает нейтральную причину; диагностируйте свой стенд в отладчике, не публикуя учётные данные.

  5. Платформа и ras должны соответствовать установленной версии. Чтение свойства не доказывает, что этот параметр используется текущей версией сервера.

  6. Не назначайте единицы по похожему имени: страницы ряда порогов не указывают единицу явно. Здесь их сырые значения не переводятся в байты или MiB по предположению.

  7. Распознанный автоматический режим не вычисляет фактический лимит: для него нужны подтверждённые значения RAM и зависимых параметров на реальном сервере.

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

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.