Как установить приоритет процессора (правильность) контейнера Docker? - PullRequest
0 голосов
/ 27 января 2019

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

Я хотел бы снизить приоритет ЦПконтейнера, потребляющего ЦП, так что всякий раз, когда ЦПУ требуются другие контейнеры, он не забивается.

Как мне это сделать?Я некоторое время искал в Интернете, но не могу найти ответ.

Я попытался запустить контейнер с --entrypoint='nice 10 mybinary', но, оказывается, --entrypoint может запускать только двоичные файлы, но неКоманды оболочки.

Ответы [ 3 ]

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

--cpu-shares выглядит как хороший ответ, хотя мне не ясно, как проверить, работает ли он.Мне также интересно, каково максимальное значение?Документ не говорит.

Но, в качестве альтернативы для доверенных контейнеров, тот же документ также показывает --cap-add=sys_nice, что позволит изменять приоритеты процесса внутри контейнера.то есть, если в контейнере доступна команда nice или renice, она должна работать, когда вы добавляете возможность sys_nice.Вы захотите разрешить эту возможность только для доверенных контейнеров, потому что не хотите, чтобы ненадежные программы меняли свои собственные приоритеты.

Вы можете проверить это, проверив столбец NI для рассматриваемого процесса, используя top или ps -efl на хосте.

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

Установка общих ресурсов ЦП является наиболее прямым ответом на ваш запрос, и обычно предпочтительнее, чем добавление возможностей в контейнер, может использоваться злоумышленником внутри контейнера для воздействия на хост.Единственная причина, по которой я могу подумать о добавлении возможности SYS_NICE к контейнеру, заключается в том, что у вас есть несколько процессов внутри контейнера и вы хотите назначить им разные приоритеты, или вам нужно изменить приоритет во время работы контейнера.

Более традиционным решением для шумных соседей является настройка каждого контейнера с ограничением того, сколько ЦП и памяти ему разрешено использовать.Это верхняя граница, поэтому следует понимать, что могут быть незанятые ресурсы ЦП, если вы установите этот низкий уровень и у вас не будет других задач, доступных для запуска ЦП.

Самый простой способ установить ограничение на контейнеры изdocker run командная строка с --cpus, которая позволяет вам настроить дробное число ядер, которые будут доступны для контейнера.Передача параметра типа --cpus 2.5 позволяет контейнеру использовать до 2,5 ядер до того, как планировщик ядра регулирует процесс.Если у вас был 4-ядерный хост, это гарантировало бы, что по крайней мере 1,5 ядра всегда будут доступны для других процессов.

В связи с этими ограничениями, в режиме Swarm вы также можете настроить резервирование для ЦП (и памяти).Резервирование - это нижний предел, который Docker гарантирует, что он не был зарезервирован для других контейнеровЭто используется для выбора узлов для планирования контейнеров и может препятствовать планированию некоторых контейнеров, когда не хватает доступных ресурсов, вместо того, чтобы планировать так много заданий на одном узле, чтобы он не работал.

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

Вы можете ограничить ресурсы ЦП на уровне контейнера.Я рекомендую использовать --cpu-shares 512 для вашего случая.

https://docs.docker.com/config/containers/resource_constraints/:

Установите для этого флага значение, большее или меньшее значения по умолчанию 1024, для увеличения или уменьшения веса контейнера.и предоставьте ему доступ к большей или меньшей пропорции циклов ЦП хост-машины.Это применяется только тогда, когда циклы ЦП ограничены.Когда доступно много циклов ЦП, все контейнеры используют столько ЦП, сколько им нужно.Таким образом, это мягкий предел.--cpu-shares не препятствует планированию контейнеров в режиме роя.Он расставляет приоритеты ресурсов ЦП контейнера для доступных циклов ЦП.Он не гарантирует и не резервирует какой-либо конкретный доступ к процессору.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...