Liberação de Memória Reservada do VPS
Categories:
O sistema Linux reserva por padrão um bloco de memória para o kdump, cujo tamanho pode ser definido pelo parâmetro crashkernel. Como a maioria dos desenvolvedores de aplicação raramente aciona falhas no kernel, é possível liberar essa memória modificando o arquivo /etc/default/grub.
Se o kdump não for necessário, defina o parâmetro crashkernel como 0M-1G:0M,1G-4G:0M,4G-128G:0M,128G-:512M, o que libera um bloco de memória.
Verificação: cat /etc/default/grub
Valor padrão:
GRUB_CMDLINE_LINUX=" vga=792 console=tty0 console=ttyS0,115200n8 net.ifnames=0 noibrs nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295 iommu=pt crashkernel=0M-1G:0M,1G-4G:192M,4G-128G:384M,128G-:512M crash_kexec_post_notifiers=1"
A explicação do campo crashkernel é: hosts com memória de 0-1G reservam 0M, hosts com memória de 1-4G reservam 192M, hosts com memória de 4-128G reservam 384M, e hosts com memória de 128G ou mais reservam 512M.
Um host com 1G de memória é classificado na faixa 1-4G, reservando 192MB para kdump. Um host com 4G de memória é classificado na faixa 4-128G, reservando 384MB para kdump.
Modificação: sudo sed -i 's/crashkernel=0M-1G:0M,1G-4G:192M,4G-128G:384M,128G-:512M/crashkernel=0M-1G:0M,1G-4G:0M,4G-128G:0M,128G-:512M/' /etc/default/grub
Reinicie para aplicar: sudo update-grub && sudo reboot
Para vps de 2C1G, comumente usados por iniciantes, o espaço de memória antes e depois da modificação é mostrado abaixo. É possível observar a diferença significativa entre 366MB e 562MB.
# Antes da modificação
root@iZj6c0otki9ho421eewyczZ:~# free
total used free shared buff/cache available
Mem: 707180 340772 123400 2624 358872 366408
Swap: 0 0 0
# Após a modificação
root@iZj6c0otki9ho421eewyczZ:~# free
total used free shared buff/cache available
Mem: 903788 341656 451380 2616 251032 562132
Swap: 0 0 0
Para vps de 2C4G, o espaço de memória antes e depois da modificação é mostrado abaixo, com diferença entre 3.1GB e 3.5GB.
# Antes da modificação
root@iZj6c1prxn78ilvd2inku1Z:~# free
total used free shared buff/cache available
Mem: 3512696 377672 2870944 1260 415116 3135024
Swap: 0 0 0
# Após a modificação
root@iZj6c1prxn78ilvd2inku1Z:~# free
total used free shared buff/cache available
Mem: 3905912 374468 3408304 1252 270508 3531444
Swap: 0 0 0
Mais informações sobre kdump
Kdump é um mecanismo de despejo de falhas de kernel, usado para capturar o estado da memória do sistema quando o kernel Linux falha. Baseia-se na tecnologia kexec, que permite que um kernel Linux inicie outro kernel Linux sem passar pelo processo de inicialização da BIOS, permitindo que o sistema inicie rapidamente um novo kernel (também chamado de kernel de captura ou crashkernel) após uma falha.
Quando o sistema encontra um erro fatal e aciona um erro de kernel (kernel panic), o kernel em execução (também chamado de kernel principal) usa kexec para carregar o kernel de captura previamente preparado e salvar o conteúdo da memória do sistema em um local específico, como uma partição de disco ou enviar pela rede para outra máquina. Este arquivo de imagem de memória salvo (vmcore ou arquivo kdump) pode ser usado para análise posterior, ajudando desenvolvedores ou administradores de sistema a identificar a causa da falha.
Para habilitar a funcionalidade kdump, geralmente é necessário reservar uma parte da memória do sistema para o kernel de captura na configuração de inicialização, garantindo que, mesmo após a falha do kernel principal, essa parte da memória permanecerá inalterada, permitindo que o kernel de captura funcione normalmente e conclua a tarefa de despejo de memória. A configuração e uso do kdump normalmente envolve modificar as configurações do gerenciador de boot, ajustar parâmetros do kernel e definir um local de armazenamento adequado para salvar o arquivo vmcore.