Como verificar se os limites de memória do kernel estão definidos no Linux

LinuxBeginner
Pratique Agora

Introdução

Neste laboratório, exploraremos como verificar e entender os limites de memória do kernel no Linux. Focaremos na configuração vm.overcommit_memory, que controla como o kernel lida com as solicitações de alocação de memória.

Através de passos práticos, você aprenderá a usar o comando sysctl para visualizar e modificar temporariamente este parâmetro do kernel, verificar as configurações de memória inspecionando o diretório /proc/sys/vm, e identificar arquivos de configuração persistentes do kernel dentro de /etc/sysctl.d. Este laboratório fornecerá experiência prática no gerenciamento e compreensão do comportamento da memória Linux.

Verificar limites de memória com sysctl vm.overcommit

Nesta etapa, exploraremos como o Linux gerencia a alocação de memória, focando especificamente na configuração vm.overcommit_memory usando o comando sysctl.

O comando sysctl é usado para modificar parâmetros do kernel em tempo de execução. Esses parâmetros são frequentemente armazenados no diretório /proc/sys/. O parâmetro vm.overcommit_memory controla como o kernel lida com as solicitações de memória que excedem a RAM física disponível.

Existem três valores possíveis para vm.overcommit_memory:

  • 0: Overcommit heurístico (Heuristic overcommit). O kernel tenta estimar se uma solicitação de alocação de memória é possível. Esta é a configuração padrão.
  • 1: Sempre overcommit (Always overcommit). O kernel sempre concede solicitações de alocação de memória, mesmo que excedam a memória disponível. Isso pode levar a processos sendo finalizados posteriormente se eles realmente tentarem usar a memória.
  • 2: Nunca overcommit (Never overcommit). O kernel não concederá solicitações de alocação de memória se elas excederem o espaço de swap total disponível mais uma porcentagem configurável da RAM física.

Vamos verificar o valor atual de vm.overcommit_memory. Abra seu terminal e digite o seguinte comando:

sysctl vm.overcommit_memory

Pressione Enter.

Você deve ver uma saída semelhante a esta:

vm.overcommit_memory = 0

Esta saída mostra que a configuração atual para vm.overcommit_memory é 0, o que significa que o kernel está usando o overcommit heurístico.

Compreender essa configuração é importante para gerenciar recursos do sistema e prevenir erros de falta de memória (out-of-memory) em determinadas aplicações.

Agora, vamos tentar alterar este valor temporariamente. Podemos fazer isso usando sudo sysctl -w. A flag -w permite que você escreva um novo valor em um parâmetro do kernel.

Digite o seguinte comando para definir vm.overcommit_memory como 1:

sudo sysctl -w vm.overcommit_memory=1

Pressione Enter.

Você deve ver uma saída confirmando a alteração:

vm.overcommit_memory = 1

Agora, vamos verificar o valor novamente para confirmar que ele foi alterado:

sysctl vm.overcommit_memory

Pressione Enter.

A saída agora deve mostrar:

vm.overcommit_memory = 1

Observe que as alterações feitas com sysctl -w são temporárias e serão redefinidas quando o sistema reiniciar. Exploraremos como tornar essas alterações permanentes em uma etapa posterior.

Clique em Continuar para prosseguir para a próxima etapa.

Verificar as configurações de memória em /proc/sys/vm

Na etapa anterior, usamos o comando sysctl para verificar e alterar o parâmetro do kernel vm.overcommit_memory. Agora, vamos ver onde esses parâmetros são realmente armazenados no sistema de arquivos.

O Linux expõe os parâmetros do kernel através de um sistema de arquivos virtual localizado em /proc/sys. Este sistema de arquivos não contém arquivos reais no disco, mas sim fornece uma interface para interagir com o kernel em execução.

Os parâmetros relacionados à memória estão localizados no diretório /proc/sys/vm/. Podemos usar o comando ls para listar os arquivos neste diretório.

Abra seu terminal e digite o seguinte comando:

ls /proc/sys/vm/

Pressione Enter.

Você verá uma lista de arquivos, cada um representando um parâmetro do kernel relacionado à memória virtual. A saída será semelhante a esta (os arquivos exatos podem variar ligeiramente dependendo da versão do kernel):

admin_reserve_kbytes            hugetlb_shm_group             oom_kill_allocating_task
block_dump                      laptop_mode                   oom_score_adj
compact_hueristics              lowmem_reserve_ratio          overcommit_memory
compact_memory                  max_map_count                 overcommit_ratio
... (muitos mais arquivos)

Observe o arquivo chamado overcommit_memory. Este arquivo contém o valor atual do parâmetro vm.overcommit_memory com o qual estávamos trabalhando na etapa anterior.

Podemos usar o comando cat para visualizar o conteúdo deste arquivo. Lembre-se que definimos o valor como 1 na etapa anterior.

Digite o seguinte comando:

cat /proc/sys/vm/overcommit_memory

Pressione Enter.

A saída deve ser:

1

Isso confirma que o valor que definimos usando sysctl -w é refletido no arquivo /proc/sys/vm/overcommit_memory.

Você também pode visualizar outros parâmetros relacionados à memória neste diretório usando cat. Por exemplo, para ver a taxa de overcommit:

cat /proc/sys/vm/overcommit_ratio

Pressione Enter.

A saída mostrará a taxa de overcommit atual, que é usada quando vm.overcommit_memory está definido como 2.

50

Explorar os arquivos em /proc/sys/vm/ é uma ótima maneira de entender os vários parâmetros do kernel que controlam o gerenciamento de memória no Linux.

Clique em Continuar para passar para a próxima etapa.

Inspecionar a configuração sysctl em /etc/sysctl.d

Nas etapas anteriores, aprendemos como verificar e alterar temporariamente os parâmetros do kernel usando sysctl e como esses parâmetros são refletidos no sistema de arquivos /proc/sys. No entanto, as alterações feitas com sysctl -w não são permanentes. Para tornar as alterações nos parâmetros do kernel persistentes em reinicializações, precisamos configurá-las em arquivos de configuração específicos.

O local principal para configurações sysctl persistentes é o arquivo /etc/sysctl.conf. Além disso, os sistemas Linux geralmente usam o diretório /etc/sysctl.d/ para armazenar trechos de configuração em arquivos separados. Essa abordagem modular facilita o gerenciamento de configurações para diferentes aplicações ou componentes do sistema.

Vamos inspecionar o conteúdo do diretório /etc/sysctl.d/. Podemos usar o comando ls para listar os arquivos dentro deste diretório.

Abra seu terminal e digite o seguinte comando:

ls /etc/sysctl.d/

Pressione Enter.

Você verá uma lista de arquivos de configuração. Esses arquivos normalmente têm uma extensão .conf. A saída pode ser algo parecido com isto:

10-console-messages.conf  10-kernel-hardening.conf  10-tcp-congestion-control.conf  99-sysctl.conf

Cada um desses arquivos pode conter configurações de parâmetros sysctl no formato parâmetro = valor. Quando o sistema inicializa, ele lê /etc/sysctl.conf e, em seguida, todos os arquivos em /etc/sysctl.d/ em ordem alfabética para aplicar as configurações persistentes dos parâmetros do kernel.

Vamos visualizar o conteúdo de um desses arquivos de configuração, por exemplo, 10-kernel-hardening.conf. Podemos usar o comando cat para exibir seu conteúdo.

Digite o seguinte comando:

cat /etc/sysctl.d/10-kernel-hardening.conf

Pressione Enter.

Você verá os parâmetros do kernel configurados neste arquivo. O conteúdo variará, mas pode incluir configurações relacionadas à segurança ou ao comportamento do sistema.

#
## sysctl settings for kernel hardening
#

## Disable unprivileged user namespaces
kernel.unprivileged_userns_clone=0

## Protect against symlink attacks
fs.protected_hardlinks=1
fs.protected_symlinks=1

## Disable kexec
kernel.kexec_load_disabled=1

## Disable bpf JIT
net.core.bpf_jit_enable=0

## Disable ptrace access to other processes
kernel.yama.ptrace_scope=1

Você pode ver como os parâmetros do kernel como kernel.unprivileged_userns_clone e fs.protected_hardlinks são definidos aqui.

Para tornar nossa configuração vm.overcommit_memory=1 permanente, normalmente adicionaríamos a linha vm.overcommit_memory = 1 a um arquivo novo ou existente em /etc/sysctl.d/ (ou em /etc/sysctl.conf). No entanto, para fins deste laboratório introdutório, não faremos essa alteração permanente.

Compreender o diretório /etc/sysctl.d/ é crucial para configurar as configurações persistentes dos parâmetros do kernel em seu sistema Linux.

Clique em Continuar para concluir este laboratório.

Resumo

Neste laboratório, aprendemos como verificar e entender os limites de memória do kernel no Linux, focando especificamente na configuração vm.overcommit_memory. Usamos o comando sysctl para visualizar o valor atual deste parâmetro, que controla como o kernel lida com solicitações de alocação de memória que excedem a RAM física disponível. Exploramos os três valores possíveis (0, 1 e 2) e suas implicações para o gerenciamento de memória. Também praticamos a alteração temporária do valor vm.overcommit_memory usando sudo sysctl -w.

Além disso, verificamos as configurações de memória do kernel inspecionando o diretório /proc/sys/vm, que fornece uma interface de sistema de arquivos para os parâmetros do kernel. Também aprendemos como identificar configurações persistentes de parâmetros do kernel, examinando os arquivos dentro do diretório /etc/sysctl.d. Essas etapas forneceram uma compreensão abrangente de como verificar e localizar as configurações de limite de memória do kernel em um ambiente Linux.