Gerenciamento de memória swap no sistema operacional Linux

A memória swap ou memória virtual é de uso secundário e provê recursos extras para armazenamento de cache para a memória principal/física (RAM). Seu uso em excesso não é recomendável, pois com certeza seu serviço ou aplicação irá demonstrar lentidão para o usuário final.

Para um definição mais completa e como funciona a memória swap leia esta referência na Wikipédia.

Neste artigo irei abordar algumas dicas rápidas de como gerenciar a memória swap e acompanhar o seu uso:

#1 Como adicionar memória swap em servidores em nuvem em arquivo

Alguns servidores virtuais em nuvem, mais conhecidos como VPS (Virtual Private Network) com baixos recursos de hardware oferecem um número muito limitado de memória RAM e swap. Dependendo do seu uso você não precisa de uma instância maior e gostaria apenas de adicionar mais memória swap.

Uma forma paliativa é adicionar memória swap por meio de um arquivo do sistema operacional. Na prática você gera um arquivo na partição ext3 ou ext4, por exemplo, com o comando dd, configura as permissões necessárias para garantir acesso restrito ao usuário root e depois formata o arquivo com o sistema de arquivos “swap” e ativa-o no boot do sistema operacional.

Ao reiniciar o servidor a memória swap já estará disponível para uso.

GoCache - CDN Nacional

Por exemplo, as instâncias menores da Amazon EC2 e Digital Ocean não possuem memória swap configurada por padrão. Veja abaixo:

Digital Ocean

Amazon EC2

#2 Verificar uso de memória swap de um sistema operacional Linux

Os comandos abaixo tem utilidades além das demonstradas abaixo, pois o foco do artigo é demonstrar algumas dicas de gerenciamento de memória swap no Linux.

Visualização da swap em tempo real

Comando vmstat

É utilizado para visualização de dados sobre o uso de memória virtual com informações sobre atividade de CPU, discos, IO de disco, paginação e etc.

O parâmetro 1 significa que a cada um segundo será impresso no console novas informações das estatísticas obtidas pelo comando vmstat. O importante é observar a coluna swap, que mostra os valores de si (total de memória trocados a partir do disco) e so (total de memória trocados para o disco) por segundo.

A primeira linha da saída do comando vmstat exibe uma média das estatísticas obtidas desde o boot do sistema operacional, por isso deve apresentar variações em relações as demais linhas.

Exemplo de um sistema operacional Ubuntu sem uso de memória swap:

 Comando free

O comando free -m também mostra o total de memória swap.  A última linha exibe o total de memória swap, a quantidade usada e a quantidade livre. Apara acompanhar o uso de memória durante o troubleshooting de um determinado problema você pode combinar o comando free com o comando watch. O watch fará com que a saída do comando free seja repetida em um determinado intervalo de tempo, fazendo com que a impressão seja de monitoração em tempo real do uso de memória RAM e swap.

Experimente o comando watch -n 1 free -m ao ligar um máquina virtual para acompanhar o uso de memória RAM em tempo real na máquina física.

Comando top e htop

O comando top e htop é mais útil para descobrir qual o processo que está consumindo mais memória no sistema operacional. A melhor forma para descobrir é ordenar a coluna de uso de memória por ordem decrescente, assim fica fácil a identificação do processo.

No top o comando para alterar a coluna de ordenação é a combinação das teclas ctrl + > ou ctrl + <, e a alteração entre ordem crescente ou decrescente é a letra R (maiúsculo).

No htop os comandos são parecidos, para escolher a coluna de ordenação digite ctrl + > ou ctrl + < e um menu à esquerda irá surgir para selecionar por qual valor será realizada a ordenação. A ordenação crescente ou decrescente no htop é realizada pela letra I (i maiúsculo).

Verificação do histórico da swap no Linux

Nem só na linha de comando é possível acompanhar o uso de memória RAM e swap no Linux. Existem diversos aplicativos para visualização de acompanhamento de performance gráficos de uso de recursos de hardware.

Applet Ubuntu indicator-multiload – para visualização no painel superior do Ubuntu na interface gráfica do Unity. A instalação é feita pelo comando:

E para realizar a configuração do aplicativo e mantê-lo na visualização do desktop ao lado do relógio da interface Unity, vá na busca do Dash e procure pelo System Load Indicator. Na figura abaixo é apresentada o uso de CPU, memória RAM, swap e load avarage do meu desktop Ubuntu.

Applet - monitor de recursos de hardware no Linux / Ubuntu

Monitoração gráfica de uso de hardware no Linux / Ubuntu

Monitor de hardware nativo do Ubuntu – este aplicativo já vem instalado por padrão nas distribuições Ubuntu. Para visualizar o uso de recursos em gráficos procure pelo System Monitor na busca do Dash.

System Monitor - Ubuntu Linux

Monitoração gráfica de uso de hardware no Linux / Ubuntu

Voltando para a linha de comando é possível verificar o histórico de uso de memória swap através do comando sysstat.

O comando sar aceita o parâmetro S para visualização do uso de memória swap, porém o sar/sysstat é muito mais completo e mais opções de uso podem ser conferidas neste artigo sobre monitoração de performance via linha de comando com o sysstat e sar. O sysstat não costuma vir instalado nas distribuições do Ubuntu/Debian, por isso talvez seja necessária sua instalação. No artigo mencionado anteriormente há os passos necessários para a instalação e ativação.

Um exemplo da visualização da memória swap do dia corrente desde que o computador foi ligado e com marcações quando é reiniciado:

Outro exemplo da visualização do uso de memória swap no Linux em um dia determinado é especificado através do parâmetro -f do comando sar:

#3 Limpar memória swap do servidor

Você já deve ter notado depois que o servidor ou estação de trabalho iniciou o uso da memória swap, até mesmo após reiniciar o serviço ou matar o processo/aplicação que fazia um uso excessivo de memória, o uso de swap ainda continua e mesmo após minutos ou horas a memória virtual nunca é zerada.

Existe um workaround ou medida paliativa que irá forçar a retirada do conteúdo da memória swap (em disco) para a memória física (RAM) sem que seja necessário reiniciar o servidor. Os comando swapon e swapoff fazem esta tarefa.

Veja um exemplo onde o processo do apache2 está consumindo recursos excessivos de memória RAM e mesmo após pará-lo ainda o uso de swap continuava.

O uso do “&&” garante que os comandos só serão executados se o anterior for executado com sucesso. É importante verificar se a memória RAM possui espaço suficiente para abrigar o conteúdo da memória virtual. E lembre-se, este procedimento é apenas um solução de contorno, pois o ideal é que você analise o motivo do uso excessivo de memória e caso sua aplicação esteja funcionando normalmente, ou seja, não existe nada de errado ou bug, pense na compra de mais memória RAM ou aumento dos recursos de memória física da máquina virtual.

Fernando Mariano

Formado em Engenharia de Computação e atua como Administrador de Sistemas há mais de 9 anos e desenvolve sua startup no mercado de concursos públicos chamada Enter Concursos.

Você pode gostar...

4 Resultados

  1. Cléber disse:

    Importante lembrar o seguinte: a memória, mesmo a principal, só é limpa quando há demanda de uso por novas páginas (de memória). Por isso a swap, uma vez “suja”, sempre fica “suja”. Isso não somente é normal como é BOM.

  2. Jefferson Midei disse:

    Olá! Excelente artigo… Mas ai surge uma dúvida: eu posso adicionar memória swap (dd if=/dev/zero of=/swapfile bs=1M count=1024) em um servidor já em operação? Ou isso vai reparticionar o HD e eu vou perder tudo que já está instalado?!

    • Obrigado!

      Você não perderá nada, pois o comando dd if=/dev/zero of=/swapfile bs=1M count=1024 criará um arquivo na raiz do sistema de arquivos. Por exemplo, você pode definir em outro local se preferir, dd if=/dev/zero of=/var/swapfile bs=1M count=1024

  1. abril 13, 2015

    […] Há também algumas indicações de aplitivos gráficos para visualizar do uso da memória swap e recursos de hardware em desktops Linux. E também dicas de como adicionar memória swap em máquinas virtuais (VPS) em instâncias pequenas que não oferecem memória virtual por padrão.” [referência: mariano.eng.br] […]

Deixe uma resposta