Что происходит с контейнерами ECS, которые превышают ограничение мягкой памяти, когда есть конфликт памяти? - PullRequest
0 голосов
/ 09 января 2019

Скажем, у меня есть экземпляр с памятью 2G, а также задача / контейнер с пределом мягкой памяти 0,5G и пределом жесткой памяти 0,75G.

Экземпляр работает с 3 контейнерами, каждый из которых занимает 0,6 ГБ памяти. Теперь нужно добавить 4-й контейнер? Что происходит с 3 работающими контейнерами? Уменьшено ли их распределение памяти? Или они перенесены в другой экземпляр? Что если другого экземпляра не будет, будет ли размещен 4-й контейнер?

Я понимаю, как работают мягкие и жесткие ограничения ЦП, поскольку ЦП является динамическим ресурсом (приложение может обрабатывать скачки в свободном ЦП). Однако в случае с памятью вы не можете на самом деле забрать память из контейнера, который ее уже использует.

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

На самом деле, память может быть восстановлена ​​из запущенных процессов. Например, ядро ​​может высвободить память, которая поддерживается файлами (например, код самого процесса). Если данные снова понадобятся, ядро ​​может добавить их обратно. Это немного объяснено в этом посте: https://chrisdown.name/2018/01/02/in-defence-of-swap.html

Если задача запланирована на этом узле, но ядру не удается освободить достаточно памяти, чтобы избежать ситуации нехватки памяти, тогда один из процессов будет убит ядром, которое докер обнаружит и уничтожит контейнер, который ECS заметит. Я не уверен, попытается ли ECS перенести неработающее задание на тот же или другой экземпляр. Это, вероятно, зависит.

0 голосов
/ 10 января 2019

4-й контейнер не сможет появиться, и вы получите ошибку ниже.

(service sample) was unable to place a task because no container instance met all of its requirements. The closest matching (container-instance 05016874-f518-4b7a-a817-eb32a4d387f1) has insufficient memory available. For more information, see the Troubleshooting section of the Amazon ECS Developer Guide.

Вам нужно добавить еще один экземпляр ecs, если вы хотите запланировать 4-й контейнер. все остальные 3 контейнера будут в устойчивом состоянии. Ничего похожего на уменьшение объема памяти в кластере не произошло. Если экземпляра нет, ваша служба всегда будет в нестабильном состоянии и по-прежнему будет давать вам вышеуказанные ошибки.

Ссылка: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html

...