AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-1147276

Grisu47's questions

Martin Hope
Grisu47
Asked: 2024-10-05 05:55:14 +0800 CST

Como os limites de memória no Kubernetes funcionam com o cgroup v2 memory.high?

  • 6

Estou tentando entender como as solicitações e limites de memória funcionam com o cgroup v2. No manifesto do Kubernetes, podemos configurar a solicitação e o limite de memória. Esses valores são então usados ​​para configurar a interface do cgroup:

  • memory.min está definido para solicitação de memória
  • memory.max está definido como limite de memória
  • memory.high é definido como limite de memória * 0,8, a menos que a solicitação de memória == limite, caso em que memory.high permanece indefinido
  • memory.low está sempre desmarcado

memory.max é bastante autoexplicativo: quando um processo no cgroup tenta alocar uma página e isso coloca o uso de memória acima de memory.max e não é possível recuperar páginas suficientes do cgroup para satisfazer a solicitação dentro de memory.max, então o OOM killer é invocado para encerrar um processo dentro do cgroup. memory.high é mais difícil de entender: a documentação do kernel diz que o cgroup é colocado sob "alta pressão de recuperação" quando a marca d'água alta é atingida, mas o que isso significa exatamente?

Mais adiante diz:

Quando atingido, ele limita as alocações, forçando-as a uma recuperação direta para eliminar o excesso, mas nunca invoca o assassino OOM.

Estou correto em assumir que isso significa que quando o cgroup tenta alocar uma página além da marca d'água memory.high, ele vai olhar sincronicamente para o lruvecs e tentar recuperar o máximo de páginas do final das listas até que esteja de volta abaixo da marca d'água alta? Ou a "pressão de recuperação" é algo que acontece assincronamente (por meio do kswapd)?

Pergunta 2: Qual é o objetivo de usar memory.high no Kubernetes? Até onde eu sei, os nós do Kubernetes normalmente são executados sem espaço de swap. As únicas páginas que podem ser recuperadas são páginas anônimas (se houver swap suficiente disponível) e cache de página. Como não há swap, isso deixa apenas o cache de página. O problema é que o cache de página também seria recuperado ao atingir memory.max, antes de invocar o OOM killer como último recurso se nada puder ser recuperado. Então memory.high é essencialmente inútil:

  • Enquanto o cache de página for usado, ele sempre pode ser recuperado e memory.max também faria isso. Com memory.high, estamos apenas limitando o aplicativo antes do que precisamos. Poderíamos muito bem definir memory.max mais baixo em primeiro lugar.

  • Se nenhum cache de página significativo for usado (o que provavelmente é o caso da maioria dos aplicativos que executam o Kubernetes hoje), então nada pode ser recuperado, portanto, não há limitação (nenhuma paginação de memória anônima não utilizada, nenhuma thrashing visível nas informações de bloqueio de pressão que nos avisariam) e encontraremos memory.max sem saber. Usar memory.high não tem efeito.

linux
  • 1 respostas
  • 73 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve