Перегрузка процессора не является проблемой. Если у вас 16 процессов, и все они пытаются выполнить работу, требующую 100% ЦП в 8-ядерной системе, ядро будет распределять время между процессами; на практике вы должны ожидать, что эти процессы получат по 50% ЦП каждый, а задача будет занимать в два раза больше времени. Один совет, который я услышал (в пространстве Kubernetes), состоит в том, чтобы устанавливать запросы к ЦП на основе требования постоянной нагрузки службы и не устанавливать пределы ЦП.
Там нет волхвов c формула для установки любого из этих чисел. Лучший способ - настроить систему метрик, такую как Prometheus, запустить комбинированную систему и посмотреть фактическое использование ресурсов. В некоторых случаях можно знать, что процесс является однопоточным и никогда не будет использовать более 1 ядра, или что вы ожидаете, что процесс будет связан с вводом / выводом, и если это не так, он должен быть ограничен, но эти параметры основаны на фактических данных. использование, вероятно, лучше.
(Память отличается тем, что вы можете фактически исчерпать физическую память, но также и процессы могут удерживать гораздо больше памяти, чем им действительно нужно. Опять же, инструмент метрики будет быть полезным здесь.)
Ваш вопрос предлагает один хост. Раздел deploy:
работает только с менеджером кластеров Swarm Docker. Если вы не используете Swarm, вам нужно использовать файл version: '2'
docker-compose.yml
, который имеет другой набор объявлений ограничения ресурсов (и в большинстве случаев не имеет понятия "резервирование") , Например,
version: '2'
services:
redis:
image: redis:alpine
# cpus: 2.0
mem_limit: 256m
mem_reservation: 64m