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:
- Parâmetro de memória virtual. Para mais informações, consulte Seção 22.3.1, “Parâmetros de memória virtual”.
- Parâmetro do sistema de arquivo. Para maiores informações, ver Seção 22.3.2, “Parâmetros do sistema de arquivo”.
- Parâmetro do núcleo. Para mais informações, veja Seção 22.3.3, “Parâmetros do núcleo”.
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
ehigh_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çãoOs 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 dovm.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, chamadamin_pages
. Esta marca d'água é usada como um fator ao determinar as duas outras marcas d'água de memória,low_pages
, ehigh_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çãooom_killer
mata processos, começando com o processo que tem o mais altooom_score
, até que o sistema se recupere.O parâmetro
oom_adj
determina ooom_score
de um processo. Este parâmetro é definido por identificador de processo. Um valor de -17 desabilita ooom_killer
para esse processo. Outros valores válidos variam de -16 a 15.
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çãoA configuração do
vm.swappiness
para0
evita agressivamente a troca de memória anônima para um disco, o que aumenta o risco de processos serem mortos pela funçãooom_killer
quando sob carga de trabalho intensiva de memória ou E/S.
Recursos adicionais
-
Para mais informações, consulte a página de manual
sysctl
. - Para mais informações sobre como definir esses parâmetros de forma temporária e persistente, consulte Seção 22.3.4, “Definição de parâmetros de kernel relacionados à memória”.