
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 -m
dá 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
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.