Processar incompatibilidade de uso de memória em um contêiner secundário do Kubernetes

Processar incompatibilidade de uso de memória em um contêiner secundário do Kubernetes

Eu tenho um contêiner sidecar com os seguintes recursos:

resources:
  limits:
    memory: 512Mi
  requests:
    memory: 64Mi

No entanto, quando executo top, vejo isto:

  • enviado e agente piloto parecem estar usando ~ 363 MB e 61 MB, respectivamente
  • a memória usada no topo é de 54,6 MB
  • correr free -mdá o seguinte; uma resposta aparentemente não correlacionada
$ free -m
              total        used        free      shared  buff/cache   available
Mem:         385307       47140      315018         292       23148      336021
Swap:             0           0           0

top correndo em um sidecar

O que exatamente está acontecendo aqui e quanta memória esses processos estão consumindo?

Responder1

Essa saída livre e superior mostra cerca de 50.000 MiB usados, de um host com cerca de 385.000 MiB de memória total.

Os contêineres compartilham um kernel, portanto, as métricas do host geralmente mostram números de todos os nós. Mesmo que os namespaces mostrem apenas seus processos e arquivos. Isso é diferente de uma VM dedicada ou host físico, onde o sistema operacional existe apenas para dar suporte ao seu aplicativo.

Os números por contêiner requerem a consulta dos números dos cgroups. Veja algumas maneiras de fazer isso no Stack Overflow:Verificando a CPU e a memória do pod do Kubernetes. Muitos dos quais requerem servidor de métricas.

Cuidado ao adicionar memória RESident de processos e esperar que esse seja o uso exato da memória do sistema. Isso não inclui memória compartilhada ou caches. E o kernel faz truques de contabilidade estranhos com a memória. Seus 3 dígitos significativos são a ideia certa. Embora, no caso simples de um pequeno número de processos, usando principalmente memória privada, seja uma boa estimativa.

informação relacionada