Mosquitto - Out of memory, отчего падает и не поднимается z2m

Если для службы - например так, типовой путь:

log.info("ramLog: запуск");

function makeNewVirtualControl(vdName, nameControl, typeControl) {
  // Пробуем создать; если оно уже есть — defineVirtualDevice 
  // "Device with given ID already exists", ловим и пропускаем создание.
  try {
    log.info("Создаём виртуальное устройство {}", vdName);
    defineVirtualDevice(vdName, {
      title: vdName,
      cells: {}
    });
  } catch (e) {
    log.info("Устройство {} уже существует, пропускаем создание ({})", vdName, e.message);
  }
 
  var vdev = getDevice(vdName);
  if (!vdev) {
    log.error("Не удалось получить устройство {}", vdName);
    return;
  }

  // Проверим, есть ли контрол; если нет, создадим его.
  if (!vdev.isControlExists(nameControl)) {
    log.debug("Контрола {} нет, создаем.", nameControl);
    vdev.addControl(nameControl, typeControl);
  }
}

var RAM_VDEV_NAME = "ramLog";
var RAM_CONTROL_NAME = "occupedMosquittoRAM";

makeNewVirtualControl(RAM_VDEV_NAME, RAM_CONTROL_NAME, {
  type: "value",
  value: 0,
  units: "kB",
  readonly: true,
  forceDefault: false
});

function updateWbMosquittoRamUsage() {
  // Суммируем RSS (kB) для всех процессов.
  runShellCommand("ps -C mosquitto -o rss= | awk '{sum+=$1} END {print (sum ? sum : 0)}'", {
    captureOutput: true,
    exitCallback: function (exitCode, capturedOutput) {
      if (exitCode !== 0) {
        log.warning("ramLog: команда завершилась с кодом {}", exitCode);
        return;
      }

      var value = parseInt(String(capturedOutput).trim(), 10);
      if (isNaN(value)) {
        log.warning("ramLog: не удалось разобрать значение RAM из '{}'", capturedOutput);
        return;
      }

      dev[RAM_VDEV_NAME + "/" + RAM_CONTROL_NAME] = value;
      log.debug("ramLog: RSS = {} kB", value);
    }
  });
}

// Первичное обновление при старте скрипта.
updateWbMosquittoRamUsage();

// Обновление каждую минуту.
setInterval(function () {
  updateWbMosquittoRamUsage();
}, 60 * 1000);