Red Hat Training

A Red Hat training course is available for RHEL 8

22.3. Otimizando a utilização da memória de um sistema

Esta seção fornece informações sobre parâmetros do kernel relacionados à memória e como usá-los para melhorar a utilização da memória de um sistema. A seguir estão os parâmetros do kernel relacionados à memória disponíveis no Red Hat Enterprise Linux 8:

22.3.1. Parâmetros de memória virtual

Os parâmetros da memória virtual estão listados no diretório /proc/sys/vm, a menos que indicado o contrário.

Os parâmetros de memória virtual disponíveis são os seguintes:

vm.dirty_ratio
É um valor percentual. Quando esta porcentagem da memória total do sistema é modificada, o sistema começa a gravar as modificações no disco com a operação pdflush. O valor padrão é 20 por cento.
vm.dirty_background_ratio
Um valor percentual. Quando esta porcentagem da memória total do sistema é modificada, o sistema começa a gravar as modificações no disco em segundo plano. O valor padrão é 10 por cento.
vm.overcommit_memory

Define as condições que determinam se um pedido de memória grande é aceito ou negado. O valor padrão é 0.

Por padrão, o kernel executa um tratamento heurístico de excesso de memória através da estimativa da quantidade de memória disponível e de pedidos falhos que são muito grandes. Entretanto, como a memória é alocada usando um algoritmo heurístico em vez de um algoritmo preciso, a sobrecarga de memória é possível com esta configuração.

Definindo o valor do parâmetro overcommit_memory:

  • Quando este parâmetro é ajustado para 1, o kernel não executa nenhuma manipulação de excesso de memória. Isto aumenta a possibilidade de sobrecarga de memória, mas melhora o desempenho para tarefas que exigem muita memória.
  • Quando este parâmetro é ajustado para 2, o kernel nega pedidos de memória iguais ou maiores que a soma do espaço swap total disponível e a porcentagem de RAM física especificada no overcommit_ratio. Isto reduz o risco de excesso de memória, mas é recomendado apenas para sistemas com áreas de swap maiores do que sua memória física.
vm.overcommit_ratio
Especifica a porcentagem de RAM física considerada quando overcommit_memory é definido como 2. O valor padrão é 50.
vm.max_map_count
Define o número máximo de áreas do mapa de memória que um processo pode utilizar. O valor padrão é 65530. Aumente este valor se sua aplicação precisar de mais áreas do mapa de memória.
vm.min_free_kbytes

Define o tamanho do pool de páginas livres reservadas. É também responsável pela definição dos limites min_page, low_page e high_page que regem o comportamento dos algoritmos de recuperação de páginas do kernel do Linux. Também especifica o número mínimo de kilobytes a serem mantidos livres em todo o sistema. Isto calcula um valor específico para cada zona de pouca memória, a cada uma das quais é atribuído um número de páginas livres reservadas em proporção ao seu tamanho.

Definindo o valor do parâmetro vm.min_free_kbytes:

  • Aumentar o valor do parâmetro reduz efetivamente a memória utilizável do conjunto de trabalho da aplicação. Portanto, você pode querer usá-la apenas para cargas de trabalho orientadas pelo kernel, onde os buffers de driver precisam ser alocados em contextos atômicos.
  • A diminuição do valor do parâmetro pode tornar o kernel incapaz de atender as solicitações do sistema, se a memória ficar muito contendida no sistema.

    Atenção

    Os valores extremos podem ser prejudiciais ao desempenho do sistema. Ajustar o vm.min_free_kbytes para um valor extremamente baixo impede que o sistema recupere a memória efetivamente, o que pode resultar em falhas no sistema e interrupções no serviço ou outros serviços do kernel. No entanto, o ajuste do vm.min_free_kbytes para um valor muito alto aumenta consideravelmente a atividade de recuperação do sistema, causando latência de alocação devido a um falso estado de recuperação direta. Isto pode fazer com que o sistema entre imediatamente em um estado fora de memória.

    O parâmetro vm.min_free_kbytes também define uma página de recuperação de marca d'água, chamada min_pages. Esta marca d'água é usada como um fator ao determinar as duas outras marcas d'água de memória, low_pages, e high_pages, que governam os algoritmos de recuperação de páginas.

/proc/PID/oom_adj

No caso de um sistema ficar sem memória e o parâmetro panic_on_oom for definido como 0, a função oom_killer mata processos, começando com o processo que tem o mais alto oom_score, até que o sistema se recupere.

O parâmetro oom_adj determina o oom_score de um processo. Este parâmetro é definido por identificador de processo. Um valor de -17 desabilita o oom_killer para esse processo. Outros valores válidos variam de -16 a 15.

Nota

Os processos criados por um processo ajustado herdam o oom_score desse processo.

vm.swappiness

O valor de swappiness, que varia de 0 a 100, controla o grau em que o sistema favorece a recuperação de memória do pool de memória anônimo, ou do pool de memória cache de páginas.

Definindo o valor do parâmetro swappiness:

  • Os valores mais altos favorecem as cargas de trabalho de arquivos mapeados e, ao mesmo tempo, a troca da memória mapeada anônima de RAM dos processos de acesso menos ativo. Isto é útil para servidores de arquivos ou aplicações de streaming que dependem de dados, de arquivos no armazenamento, para residir na memória a fim de reduzir a latência de E/S para as solicitações de serviço.
  • Valores baixos favorecem cargas de trabalho anônimas enquanto se recupera o cache da página (memória mapeada por arquivo). Esta configuração é útil para aplicações que não dependem muito das informações do sistema de arquivos e utilizam muito a memória privada e dinamicamente alocada, tais como aplicações matemáticas e de números, e poucos supervisores de virtualização de hardware como o QEMU.

    O valor padrão do parâmetro vm.swappiness é 30.

    Atenção

    A configuração do vm.swappiness para 0 evita agressivamente a troca de memória anônima para um disco, o que aumenta o risco de processos serem mortos pela função oom_killer quando sob carga de trabalho intensiva de memória ou E/S.

Recursos adicionais