Como Gerenciar CPU
Last updated
Last updated
O Docker permite limitar e gerenciar o uso de CPU dos containers de maneira granular, proporcionando um controle eficiente sobre os recursos disponíveis no sistema. Isso é especialmente útil em ambientes de produção, onde você pode querer garantir que determinados containers não consumam recursos excessivos. A seguir, são descritas as principais opções relacionadas ao gerenciamento de CPU no Docker, com explicações detalhadas, exemplos de entrada e saída, e cenários comuns de uso.
--cpu-period
O parâmetro --cpu-period
especifica o período de tempo em microssegundos para a distribuição do uso de CPU dos containers. Ele funciona em conjunto com --cpu-quota
para determinar a fração de CPU que o container pode usar.
Exemplo:
Nesse exemplo, o --cpu-period=100000
define um período de 100 mil microssegundos (100ms). Já o --cpu-quota=25000
limita o container a usar 25% de uma CPU durante esse período.
Entrada:
--cpu-period=100000
--cpu-quota=25000
Saída:
O container poderá usar 25% de uma CPU, com o período de verificação de uso reiniciado a cada 100ms.
Uso comum: Esse conjunto de parâmetros é útil quando você deseja garantir que um container use apenas uma fração limitada da CPU total, o que pode ser importante em ambientes de multi-tenancy, onde várias aplicações dividem o mesmo hardware.
--cpu-quota
O parâmetro --cpu-quota
define o tempo máximo, em microssegundos, que o container pode usar dentro de um período definido por --cpu-period
. Se você quer limitar o uso de CPU a uma quantidade específica, --cpu-quota
é a maneira de fazer isso.
Exemplo:
Nesse caso, o container pode usar até 50% de uma CPU durante o período padrão de 100ms.
Entrada:
--cpu-quota=50000
Saída:
O container terá 50% de uma CPU disponível durante o período padrão de 100ms.
Uso comum: --cpu-quota
é usado em situações onde é necessário garantir que um container não exceda um uso específico de CPU, mesmo que outras CPUs estejam disponíveis.
--cpuset-cpus
Este parâmetro permite que você especifique quais CPUs físicas (ou núcleos de CPU) o container poderá usar. O valor de --cpuset-cpus
deve ser uma lista de números de núcleos separados por vírgulas.
Exemplo:
Nesse caso, o container estará restrito a usar apenas os núcleos de CPU 0 e 1.
Entrada:
--cpuset-cpus="0,1"
Saída:
O container só poderá usar os núcleos de CPU 0 e 1, independentemente da carga ou disponibilidade de outros núcleos.
Uso comum: Este parâmetro é frequentemente utilizado para isolar containers em determinados núcleos, garantindo que eles não interfiram com outros containers ou processos críticos que estejam rodando em outros núcleos.
--cpus
O parâmetro --cpus
é a maneira mais simples de limitar o uso de CPU de um container. Ele define quantas CPUs o container pode usar, com frações de CPU permitidas.
Exemplo:
Nesse exemplo, o container pode utilizar até 1.5 CPUs, ou seja, ele tem acesso total a uma CPU e pode utilizar metade de outra.
Entrada:
--cpus="1.5"
Saída:
O container terá acesso total a uma CPU e a 50% de uma segunda CPU.
Uso comum: --cpus
é utilizado para limitar o uso de CPU de uma maneira mais intuitiva, sem a necessidade de definir períodos e cotas manualmente.
Essas opções de controle de CPU são particularmente úteis em ambientes de alta densidade, onde muitos containers estão rodando simultaneamente e você deseja evitar que um container monopolize os recursos de CPU do sistema. Elas também são aplicadas em cenários de priorização de workloads, onde você quer garantir que processos críticos sempre tenham acesso preferencial aos recursos.
Ambientes de produção multi-tenant: onde diversos containers de diferentes clientes compartilham o mesmo host físico.
Garantia de qualidade de serviço (QoS): onde containers com prioridade mais baixa têm limites rigorosos de CPU para garantir que processos prioritários mantenham desempenho consistente.
Testes de stress: para simular ambientes com recursos limitados e avaliar o comportamento de uma aplicação quando restrita em termos de uso de CPU.
Neste exemplo, o container está restrito a usar até 50% de duas CPUs (uma CPU completa), com o uso restrito aos núcleos 0 e 1.
Esses parâmetros fornecem uma maneira poderosa de garantir controle de CPU sobre os containers, permitindo uma execução mais eficiente e previsível em ambientes complexos.