Я узнал от команды Azure, что лимит памяти для модулей Edge, включая edgeHub, можно контролировать, указав createOptions -> HostConfig -> Memory. Как контролировать ограничение памяти для контейнера edgeAgent Docker, созданного edgeAgent? Это задокументировано? В настоящее время здесь он отображается как 1,88 ГБ на виртуальной машине 2 ГБ.
Ниже приведена выдержка из docker stats.
fd66aaa4dbe1 edgeAgent 0.01% 40.59MiB / 1.885GiB 2.10% 2.18MB / 1.13MB 55.6MB / 705kB 15


Установка предела памяти не является специфической для модуля edgeHub, но она одинакова для любого другого модуля Docker, используемого с IoTEdge. Вы можете добавить параметр Memory в раздел HostConfig в createOptions любого модуля.
Для edgeAgent параметр развертывания будет выглядеть следующим образом:
"systemModules": {
"edgeAgent": {
"type": "docker",
"settings": {
"image": "mcr.microsoft.com/azureiotedge-agent:1.0",
"createOptions": "{\"HostConfig\":{\"Memory\":536870912}}"
}
},
"edgeHub": {
...
}
}
При этом делаем новое развертывание.
Чтобы изменения вступили в силу на вашем компьютере, вы должны удалить модуль edgeAgent, чтобы он создал новый в соответствии с вашими измененными правилами развертывания. Вы можете сделать это с помощью следующей команды:
sudo docker rmi mcr.microsoft.com/azureiotedge-agent:1.0 -f
После этого перезапустите iotEdge Deamon с помощью
sudo systemctl restart iotedge
После этого память для модуля edgeAgent будет ограничена.
Примечание: Если вы хотите ограничить память на Raspberry Pi, имейте в виду, что поддержка ограничения памяти отключена по умолчанию. Вы можете найти HowTo для его включения здесь: https://blog.raveland.org/post/docker_raspian/
я пытался предоставить следующее и не имел никакого эффекта "edgeAgent": { "type": "docker", "settings": { "image": "mcr.microsoft.com/azureiotedge-agent:1.0", "createOptions": "{\"HostConfig\": { \"Memory\": \"536870912\" }}" } },
Значение «Память» является целым числом, а не строкой. Попробуйте убрать кавычки вокруг значения.
Я попытался изменить значение памяти на целое число, и это не имеет никакого эффекта. Я предполагаю, что /usr/bin/iotedged запускает edgeAgent и не читает двойник устройства.
Модуль edgeAgent необходимо создать заново после того, как вы изменили параметры развертывания. Я соответствующим образом скорректировал свой ответ. Я только что попробовал это на виртуальной машине, и это действительно работает!
почему необходимо удалить образ EdgeAgent Docker? не ограничивает ли память настройку при запуске контейнера?
Вы выполнили описанные шаги? Это ограничило память для edgeAgent?
да, это произошло после того, как я удалил образ edgeAgent. Можете ли вы объяснить, почему требуется удаление изображения?
Если мой ответ вам подходит, отметьте его как принятый. Если это не работает для вас, пожалуйста, предоставьте некоторые подробности.