Como limitar CPU por contêiner: guia prático

Como limitar CPU por contêiner: guia prático - hero

Como limitar CPU por contêiner: guia prático

Índice

Limitar CPU por contêiner é uma prática importante para manter aplicações isoladas, evitar que um serviço consuma todos os recursos do servidor e preservação a estabilidade do ambiente. A configuração pode ser feita no Docker, em orquestradores como Kubernetes e em plataformas de hospedagem que ofereçam controle de recursos.

O que é limitar CPU por contêiner

O que é limitar CPU por contêiner - imagem ilustrativa
O que é limitar CPU por contêiner

Um contêiner é uma forma de executar um aplicativo dentro de um ambiente isolado. A partir dessa isolamento, o sistema operacional ainda pode compartilhar a CPU física com outros contêineres e processos. Por isso, especialmente em servidores com vários serviços, é necessário estabelecer limites para que cada aplicativo utilize apenas a quantidade de CPU necessária.

CPU é a unidade de processamento do computador. Quando um contêiner utiliza muita CPU, isso pode ocorrer por excesso de tráfego, loops infinitos, processamento em paralelo, rotinas pesadas ou falhas na aplicação. O limite funciona como uma regra de contenção: o processo pode usar mais ou menos recursos, mas não ultrapassa o espaço processamento definido pela equipe de infraestrutura.

Limitar CPU não deixa o computador mais lento por definição. O objetivo é distribuir o uso de forma previsível. Também não significa que todo contêiner precisa receber uma cota baixa. Uma aplicação que realiza tarefas legítimas pode precisar de mais CPU do que outra. A escolha deve considerar o perfil de uso, o número de serviços no mesmo servidor e a capacidade total disponível.

Quando esse limite é atingido, o Linux pode registrar proteção ou throttling. O throttling é uma temporária redução ou pausa na execução do processo para que a cota seja respeitada. Dependendo do ambiente, o sistema pode aumentar o tempo de resposta sem encerrar imediatamente o contêiner. Em casos extremos, o processo pode receber uma falha, ser reiniciado ou passar por um estado de erro.

CPU, quota e limites em um contêiner

CPU, quota e limites em um contêiner - imagem ilustrativa
CPU, quota e limites em um contêiner

Para entender a configuração, é importante diferenciar limite, reserva e quota. Limite de CPU é o máximo que o contêiner pode utilizar em um determinado período. Reserva de CPU representa uma quantidade mínima garantida ou solicitada, conforme a ferramenta. Quota é a cota total permitida para um processo ou grupo de processos. CPU shares é uma proporção relativa de distribuição quando o recurso está disputado.

Essas configurações não têm exatamente o mesmo significado. Docker costuma working com opções como cpus, cpu-period e cpu-quota. Kubernetes usa principalmente limits.cpu e requests.cpu. Scheduler, systemd e cgroups também podem aplicar controles próprios. Por isso, uma regra definida em uma camada pode ser complementada ou sobrescrita por outra.

O cgroups, controle de grupos de processos do Linux, é a base usada por Docker e por muitas ferramentas modernas para organizar o uso de recursos. Ele permite que um serviço, usuário ou contêiner tenha limites de CPU, memória e outros recursos. Compreender essa camada ajuda bastante quando a configuração parece não ter efeito.

Como limitar CPU no Docker

Como limitar CPU no Docker - imagem ilustrativa
Como limitar CPU no Docker

Docker oferece diferentes formas de controlar o uso de CPU. A opção mais direta para a maioria dos casos é informar quantos processadores lógicos o contêiner pode utilizar.

Limitando a quantidade de processadores

O comando a seguir permite que o contêiner use até 1.5 processadores lógicos:

docker run -d \
  --name minha-aplicacao \
  --cpus=1.5 \
  imagem-da-aplicacao:latest

Nesse exemplo, 1.5 significa que a aplicação pode aproveitar até o equivalente a um processor e meio. O valor não indica um modelo específico de processador. Ele representa uma fração da capacidade total de CPU disponível ao contêiner.

Para conferir os contêineres ativos e seus limites, use:

docker ps

Para inspecionar a configuração completa, execute:

docker inspect nome-do-conteiner

O campo de limites aparece na seção de configurações de recursos do contêiner. Também é possível consultar informações por meio de comandos específicos do Docker, dependendo da versão instalada.

Usando cpu-period e cpu-quota

Outra forma é definir uma cota baseada em um período. O cpu-period representa o intervalo de referência, enquanto o cpu-quota define quanto tempo de CPU pode ser usado nesse intervalo.

Exemplo:

docker run -d \
  --name minha-aplicacao \
  --cpu-period=100000 \
  --cpu-quota=50000 \
  imagem-da-aplicacao:latest

Nesse caso, a aplicação pode usar 50.000 microsssegundos de CPU a cada 100.000 microssegundos, o que equivale a meio processador lógico. Essa opção é útil paraSettings mais granulares e para compatibilidade com diferentes formas de dimensionamento.

Limitando pesos de CPU

Quando há vários contêineres e a CPU é disputada, os pesos podem influencesar a distribuição. A configuração abaixo dá ao contêiner o peso 1024:

docker run -d \
  --name minha-aplicacao \
  --cpu-shares=1024 \
  imagem-da-aplicacao:latest

Os cpu-shares funcionam de forma relativa. Se outro contêiner também usa CPU, a proporção ajuda a determinar quem terá acesso preferencial ao processador. Essa opção não limitaRigidamente a quantidade máxima, mas pode repartir o recurso quando a demanda aumenta.

Para entender melhor, imagine dois contêineres:

  • Um recebe peso 1024 e outro recebe 512.
  • Quando ambos precisam de CPU.
  • a distribuição tende a favorecer o primeiro na proporção de dois para um.
  • Essa proporção não garante que o primeiro sempre terá o dobro de núcleos físicos.

Aplicando limites em arquivo Compose

Em projetos que usam Docker Compose, a restrição pode ser declarada no arquivo compose.yaml:

services:
  aplicacao:
    image: imagem-da-aplicacao:latest
    cpus: 1.5

Para aplicar a configuração, o comando mais comum é:

docker compose up -d

Se a configuração for alterada em um serviço já em execução, é necessário recriar o serviço para que a nova configuração seja aplicada. Alguns comandos, como docker compose up -d, fazem essa recriação quando identificam mudanças.

Como limitar CPU no Kubernetes

Como limitar CPU no Kubernetes - imagem ilustrativa
Como limitar CPU no Kubernetes

Kubernetes organiza aplicações em conjuntos de objetos. O objeto Deployment, por exemplo, descreve como devem funcionar várias cópias de uma aplicação. Os limites de CPU são definidos em resources.limits, enquanto as solicitações são definidas em resources.requests.

Configuração de requests e limits

Um manifesto mínimo pode ser escrito assim:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: minha-aplicacao
spec:
  replicas: 2
  selector:
    matchLabels:
      app: minha-aplicacao
  template:
    metadata:
      labels:
        app: minha-aplicacao
    spec:
      containers:, name: aplicacao
          image: imagem-da-aplicacao:latest
          resources:
            requests:
              cpu: 500m
            limits:
              cpu: "1"

O valor 500m significa 500 milicores. Milicore é uma unidade que representa uma fração de um núcleo de CPU. O limite 1 equivale a um núcleo inteiro solicitado para o contêiner.

requests.cpu é usado pelo scheduler para decidir em qual nó um contêiner pode ser colocado. limits.cpu estabelece o teto de uso de CPU para o contêiner. Quando o limite é atingido, o contêiner pode experiencing throttling até que a demanda diminua.

###cuidado com requests e limites muito diferentes

Uma configuração com request pequeno e limite muito alto pode funcionar para aplicações com picos curtos. No entanto, ela também pode aumentar o risco de saturação em um nó compartilhado. Se o scheduler是否可以蓊der Many pods based em requests menores do que o workload realmente需要, o node pode ficar sobrecarregado quando many services starts processing ao mesmo tempo.

Uma configuração com request igual ao limit pode reservar uma fração mais previsível, porém pode consumir capacidade que poderia ser utilizada por outros serviços. A escolha ideal depende da estratégia de capacidade do cluster e do perfil da aplicação.

Configurando por namespace

Em alguns ambientes, uma restrição pode ser aplicada a todos os contêineres de um namespace por meio de LimitRange:

apiVersion: v1
kind: LimitRange
metadata:
  name: limites-cpu
  namespace: producao
spec:
  limits:, type: Container
      default:
        cpu: "1"
      defaultRequest:
        cpu: 500m
      max:
        cpu: "2"

Nesse exemplo, o padrão para contêineres do namespace é um limite de uma CPU, com solicitação padrão de 500 milicores. O limite máximo é de duas CPUs. Valores explícitos no manifesto podem ter precedência, conforme as regras do namespace e da política do cluster.

Verificando o uso real

O Kubernetes oferece comandos para consultar o uso atual:

kubectl top pods
kubectl top nodes

Para obter detalhes de uma aplicação:

kubectl describe pod nome-do-pod

Também é possível consultar métricas do container:

kubectl top pod nome-do-pod --containers

Esses comandos dependem da instalação de um componente de métricas, como o Metrics Server. Em ambientes de produção, métricas avançadas podem vir de soluções como Prometheus, Grafana ou provedores de observabilidade.

Tabela comparativa das principais opções

Ambiente Limite principal Solicitação ou garantia Unidade comum Efeito quando o limite é atingido
Docker run --cpus Não se aplica CPU lógica ou fração Throttling ou falha conforme o runtime
Docker Compose cpus Não se aplica CPU ou fração Aplica a regra ao serviço
Kubernetes limits.cpu requests.cpu Núcleos ou milicores Throttling no contêiner
cgroups cpu.max Controle direto do grupo Quota por período Restrição no grupo de processos
systemd CPUQuota CPUWeight Percentual e peso Limita ou repete prioridade

A tabela mostra que não existe um único comando para todos os cenários. O nome da opção muda, mas a ideia central permanece: establecer um teto para o uso de processamento e acompanhar se esse teto atende à aplicação.

Boas práticas para dimensionar a CPU

Comece observando o uso real

DimENSIONAR somente pela suposição pode gerar desperdício ou falta de capacidade. Observe o uso médio, os picos e o comportamento quando há tráfego maior. Ferramentas de monitoramento ajudam a responder perguntas como quanto CPU a aplicação utiliza em horário de movimento ou quanto consumo ocorre ao processar um lote. Observe o uso médio em condições normais. Identifique picos durante horários de maior tráfego. Separe o consumo relacionado à aplicação do consumo de tarefas em segundo plano. Verifique se o processo estálimitado por CPU ou por outro recurso.

Use limites como proteção, não como único indicador

Um limite baixo pode穩会造成 latência. Um limite muito alto pode permitir que uma falha consuma recursos excessivos. A estratégia mais segura combina limite, solicitação, monitoramento e alertas. O limite deve ser definido com um objetivo operacional claro.

Considere o comportamento de aplicações web

Aplicações web costumam alternar entre períodos de espera e períodos de processamento. Durante uma requisição, a CPU pode permanecer ociosa enquanto a aplicação aguarda banco de dados, cache ou serviços externos. Esse tipo de aplicação pode não precisar da mesma cota de um processamento batch, que permanece ativo continuamente.

Analise o restante dos recursos

CPU baixa pode estar acompanhada por pressão em memória, disco ou rede. Se o processo troca constantemente com o disco, aumentar CPU talvez não resolva. Monitorar CPU, memória, latência de entrada e saída ajuda a separar os problemas.

Teste em ambiente semelhante ao de produção

Uma configuração validada em um computador de desenvolvimento pode não representar o comportamento de um servidor. O número de núcleos, o tipo de armazenamento, a rede e a concorrência mudam o resultado. Testes de carga e monitoramento permitem ajustar os valores com mais segurança.

Documente a configuração

Registre qual serviço possui limite, por que ele foi escolhido e quem é responsável por revisar a configuração. A documentação evita que uma alteração antiga seja mantida sem contexto. Em ambientes com Git, a configuração pode ser versionada junto do restante da aplicação.

Erros comuns ao limitar CPU

Configurar o limite e esquecer de reiniciar o serviço

Algumas mudanças não são aplicadas ao contêiner que já está em execução. Depois de alterar o Compose ou manifesto, verifique se o serviço foi recriado e consulte a configuração efetiva. Use os comandos de inspeção da plataforma para confirmar os valores.

Confundir CPU lógica com núcleo físico

Um servidor pode oferecer mais threads lógicas do que núcleos físicos. O Docker e o Kubernetes normalmente trabalham com unidade lógica disponível ao processo. Portanto, 2 CPUs podem não significar dois núcleos físicos independentes. A diferença importa na interpretação de limites e no desempenho.

Definir a mesma cota para todas as aplicações

Cada serviço tem uma demanda diferente. Banco de dados, worker, API e frontend podem ter perfis distintos. Usar a mesma configuração para todos pode deixar uma aplicação sem capacidade ou outra com recurso ocioso.

Ignorar o throttling

Se o contêiner está atingindo o limite com frequência, o indicador de latência pode piorar. Aumentar o limite pode ajudar, mas somente se houver capacidade disponível no host ou nó. Também é possível otimizar a aplicação, reduzir tarefas duplicadas ou distribuir a carga entre réplicas.

Medir somente o servidor inteiro

O consumo total da máquina não mostra com precisão qual contêiner está causando o problema. Use métricas por contêiner, por processo e por aplicação. Em Kubernetes, o kubectl top ajuda, mas uma solução completa pode exigir dashboards e histórico.

Ignorar a unidade

Em Kubernetes, 1 significa uma CPU, enquanto 500m significa 500 milicores. Em Docker, 1.5 representa uma fração de processador lógico. Compreender as unidades evita limites dez vezes maiores ou menores do que o pretendido.

Monitoramento e diagnóstico

Quando um serviço fica lento, a primeira question não deve ser apenas quanto CPU ele usou. É necessário observar quando o limite foi atingido, por quanto tempo e como isso afetou as requisições. Compare CPU usada com limite configurado. Verifique frequência de throttling. Analise latência de requisições e tempo de resposta. Observe filas e tarefas aguardando processamento. Identifique reinícios e encerramentos inesperados. Confirme se o nó ou servidor possui CPU disponível.

No Docker, os logs e as informações de inspeção ajudam a confirmar parâmetros e falhas. No Kubernetes, os eventos do pod, os logs do contêiner e as métricas de uso oferecem uma visão mais completa. Ferramentas como Prometheus podem criar alertas baseados em limites e padrões históricos.

É importante distinguir uso de CPU de espera por CPU. Se a aplicação está esperando uma resposta lenta do banco, aumentar o limite de CPU pode não corrigir a causa. Nesse caso, é necessário investigar dependências externas e o tempo de resposta do banco.

Segurança e estabilidade do servidor

O limite de CPU é uma ferramenta de isolamento e estabilidade. Quando um contêiner apresenta falha, o restante dos serviços pode continuar operando com previsibilidade. Isso é especialmente importante em hospedagens compartilhadas, ambientes de teste e servidores que executam várias aplicações.

Ainda assim, limites mal configurados podem causar reinícios constantes. A equipe deve observar os efeitos de cada alteração e manter uma margem compatível com a capacidade disponível. Também é recomendável usar原则 de menor privilégio, atualizar imagens, proteger o acesso ao daemon do Docker e evitarprivileged containers sempre que possível.

Em Kubernetes, políticas de segurança e restricts de namespace podem complementar os limites. A configuração de rede, permissões de serviço, secrets e volumes deve ser revisada separadamente. Limitar CPU protege o recurso de processamento, mas não resolve todos os riscos de segurança.

Este conteúdo tem caráter informativo. Decisões técnicas devem ser tomadas com profissional especializado.

Perguntas Frequentes (FAQ)

1. Qual é a diferença entre limite e reserva de CPU em um contêiner?

O limite é o máximo que o contêiner pode utilizar, enquanto a reserva representa a quantidade que o sistema pode considerar para agendamento ou prioridade. No Kubernetes, requests.cpu é usado para decisão de placement e limits.cpu estabelece o teto de processamento. Docker pode trabalhar principalmente com limite e pesos relativos.

2. Como limitar a CPU de um contêiner Docker?

Use a opção --cpus na criação do contêiner. Por exemplo, docker run --cpus=1 imagem permite até uma CPU lógica. Para projetos com Compose, declare cpus: 1 no serviço e recrie o contêiner para aplicar a mudança.

3. O que significa 500m de CPU no Kubernetes?

500m significa 500 milicores, ou metade de uma CPU. O valor não representa 500 por cento nem 500 núcleos. É uma unidade relativa usada para reservar ou limitar a capacidade de processamento de um contêiner.

4. O que acontece quando um contêiner atinge o limite de CPU?

O sistema pode aplicar throttling, que é uma redução temporária do tempo de processamento disponível. A aplicação pode ficar mais lenta, acumular tarefas ou, em casos específicos, falhar. O comportamento exato depende do runtime, do sistema operacional, da linguagem da aplicação e da configuração do ambiente.

5. É melhor usar CPU limit ou CPU request?

Os dois têm funções diferentes. A request ajuda o scheduler a escolher um local e a reserva capacidade lógica, enquanto o limit estabelece um teto. Uma estratégia equilibrada considera o padrão de uso, a capacidade do nó e a necessidade de isolamento.

6. Aumentar o limite de CPU sempre melhora o desempenho?

Não necessariamente. Se o problema estiver em banco de dados, disco, rede ou uma dependência externa, mais CPU não resolve a causa. O aumento também pode gerar contenção em outros contêineres. É recomendável medir, testar e observar antes de alterar limites.

Conclusão

Limitar CPU por contêiner é uma medida de isolamento, estabilidade e governança técnica. Docker permite controlar processadores com opções como --cpus, cpu-quota e cpu-shares. Kubernetes permite definir requests.cpu e limits.cpu, além de aplicar padrões com LimitRange.

A configuração correta nasce do观察. Comece com uma estimativa razoável, monitore o uso real, analise os picos e ajuste os valores conforme a demanda. Lembre-se de que CPU é apenas uma parte da saúde do serviço. Memória, disco, rede, dependências e latência também precisam ser acompanhados.

Se você precisa de ajuda para colocar isso em prática, a Baita Site tem uma equipe especializada em sites, e-commerce, sistemas e inteligência artificial, com domínio total de WordPress. Fale com a gente e veja como podemos acelerar o seu projeto.

Referências consultadas, Documentação oficial do Docker, recursos de CPU para contêineres

https://docs.docker.com/engine/containers/resource_constraints/#cpu, Documentação oficial do Docker, referência da opção docker run: https://docs.docker.com/reference/cli/docker/container/run/#cpus, Documentação oficial do Kubernetes,Gerenciamento de recursos para contêineres: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/, Documentação oficial do Kubernetes, Namespace e LimitRange: https://kubernetes.io/docs/concepts/policy/limit-range/, Red Hat, gerenciamento de CPU e cgroups em containers: https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/managing_monitoring_and_updating_the_system/monitoring-cpu-load-through-proc-stat, MarkTechPost, cobertura sobre inteligência artificial e otimização de infraestrutura: https://www.marktechpost.com/category/artificial-intelligence/

Quer ajuda para colocar isso em pratica?

A Baita Site trabalha com sites, e-commerce, sistemas e IA. Quem prefere resolver com acompanhamento, sem ter que virar especialista em tudo, costuma procurar esse tipo de suporte.

WhatsApp (47) 99905-6989  |  WhatsApp (47) 99198-5289

Veja tambem

Perguntas Frequentes (FAQ)

1. Qual é a diferença entre limite e reserva de CPU em um contêiner?

O limite é o máximo que o contêiner pode utilizar, enquanto a reserva representa a quantidade considerada para agendamento ou prioridade. No Kubernetes, requests.cpu é usado para placement e limits.cpu estabelece o teto de processamento. Docker pode trabalhar principalmente com limite e pesos relativos.

2. Como limitar a CPU de um contêiner Docker?

Use a opção –cpus na criação do contêiner. Por exemplo, docker run –cpus=1 imagem permite até uma CPU lógica. Para projetos com Compose, declare cpus no serviço e recrie o contêiner para aplicar a mudança.

3. O que significa 500m de CPU no Kubernetes?

500m significa 500 milicores, ou metade de uma CPU. O valor não representa 500 por cento nem 500 núcleos. É uma unidade relativa usada para reservar ou limitar a capacidade de processamento de um contêiner.

4. O que acontece quando um contêiner atinge o limite de CPU?

O sistema pode aplicar throttling, reduzindo temporariamente o tempo de processamento disponível. A aplicação pode ficar mais lenta, acumular tarefas ou, em casos específicos, falhar. O comportamento depende do runtime, do sistema operacional e da aplicação.

5. É melhor usar limite ou reserva de CPU?

Os dois têm funções diferentes. A reserva ajuda o scheduler a escolher um local e representa capacidade lógica, enquanto o limite estabelece um teto. Uma estratégia equilibrada considera o padrão de uso, a capacidade do nó e a necessidade de isolamento.

Gostaria de receber mais novidades?

Nossas publicações serão sempre voltadas ao mundo do marketing digital, design e criação de sites. Você não será importunado com assuntos que não são do seu interesse!

Compartilhe com seus familiáres e amigos!

Baita Site

Desenvolvemos soluções completas em Marketing Digital para o seu o seu negócio.

Contate-nos, solicite um orçamento, teremos o maior prazer em lhe ajudar!

baitasite@baitasite.com.br
+55 (47) 3360-7843
CNPJ 22.130.607/0001-29

Porque nos escolher?

É algo muito simples! Temos anos e uma vasta experiência com internet, nosso preço é justo e nosso trabalho profissional.

São anos de estudo e dedicação para adquirir o conhecimento necessário para executar projetos com qualidade e eficiência

Onde Estamos

Estamos localizados em um aconchegante home office em Itapema, litoral de Santa Catarina. Você está longe? Não tem problema!

Somos feras em atendimento e suporte a distância, por WhatsApp e pela internet!

Copyright 2020 - Baita Site - Criação de Sites em Itapema. Site feito com amor por nós mesmos!