Relatório de Memória Linux

LinuxBeginner
Pratique Agora

Introdução

O gerenciamento de memória é um aspecto crítico da administração de sistemas Linux que afeta diretamente o desempenho e a estabilidade do sistema. Compreender como a memória é alocada, utilizada e relatada em sistemas Linux permite que os administradores otimizem o desempenho, solucionem problemas e garantam recursos suficientes para as aplicações.

Neste laboratório, você aprenderá a monitorar e analisar o uso da memória em sistemas Linux usando ferramentas de linha de comando. Você explorará o comando free, que fornece informações essenciais sobre a alocação e o uso da memória do sistema. Ao dominar essas ferramentas, você adquirirá as habilidades necessárias para monitorar efetivamente os recursos de memória do sistema e tomar decisões informadas sobre a otimização do sistema.

Ao final deste laboratório, você será capaz de verificar o status da memória do sistema, interpretar as estatísticas de memória e criar relatórios básicos de uso da memória, que são habilidades fundamentais para qualquer usuário ou administrador de sistema Linux.

Usando o Comando 'free' Básico

O comando free é um utilitário Linux fundamental que exibe a quantidade de memória livre e utilizada em seu sistema. Esta informação ajuda você a entender o estado atual da memória do seu sistema e determinar se você tem recursos suficientes para suas aplicações.

Executando o Comando free Básico

Abra seu terminal no espaço de trabalho padrão em /home/labex/project e execute o comando free básico:

free

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

               total        used        free      shared  buff/cache   available
Mem:         8000000     3000000     1000000       25000     4000000     4700000
Swap:             0           0           0

A saída mostra os valores de memória em bytes, o que pode ser difícil de ler. Para um formato mais legível, use a opção -h (legível por humanos):

free -h

Agora a saída será mais parecida com esta:

               total        used        free      shared  buff/cache   available
Mem:           7.6Gi       2.9Gi       954Mi        24Mi       3.8Gi       4.5Gi
Swap:             0B          0B          0B

Este formato exibe os tamanhos de memória com as unidades apropriadas (KB, MB, GB), tornando-o muito mais fácil de interpretar.

Criando um Diretório para Seu Trabalho

Vamos criar um diretório para armazenar os arquivos que você criará durante este laboratório:

mkdir -p ~/project/memory_data

Salvando as Estatísticas de Memória em um Arquivo

Agora, vamos salvar a saída do comando free -h em um arquivo para referência futura:

free -h > ~/project/memory_data/memory_stats.txt

Para verificar se o arquivo foi criado e contém as informações esperadas, use o comando cat:

cat ~/project/memory_data/memory_stats.txt

Você deve ver a mesma saída que foi exibida anteriormente em seu terminal.

Entendendo as Colunas de Saída de Memória

Agora que você tem as estatísticas básicas de memória, vamos entender o que cada coluna na saída do comando free significa. Este conhecimento ajudará você a interpretar o status da memória do sistema de forma mais eficaz.

Colunas da Saída de Memória Explicadas

Abra o arquivo de estatísticas de memória que você criou na etapa anterior:

cat ~/project/memory_data/memory_stats.txt

A saída contém várias colunas:

  1. total: A quantidade total de memória (RAM) instalada no sistema.

  2. used: A quantidade de memória atualmente sendo usada pelo sistema.

  3. free: A quantidade de memória que não está sendo usada para nada no momento.

  4. shared: Memória compartilhada por múltiplos processos, frequentemente usada por tmpfs (sistemas de arquivos temporários) e segmentos de memória compartilhada.

  5. buff/cache: Memória usada por buffers do kernel e cache de páginas:

    • buffers: Memória usada pelo kernel para armazenar temporariamente dados antes de escrever no disco
    • caches: Memória usada para armazenar dados lidos do disco para acesso mais rápido
  6. available: Uma estimativa de quanta memória está disponível para iniciar novas aplicações sem usar swap.

Criando um Relatório de Memória

Agora, vamos criar um relatório detalhado de memória explicando o que cada coluna significa e registrando os valores atuais. Crie um novo arquivo chamado memory_report.txt:

nano ~/project/memory_data/memory_report.txt

No editor nano, adicione o seguinte conteúdo (substitua os valores de espaço reservado pelos valores reais do seu sistema):

Relatório de Memória - Criado em $(date)

total: [Seu valor aqui]
A quantidade total de RAM física instalada no sistema.

used: [Seu valor aqui]
A quantidade de memória atualmente sendo usada por aplicações e pelo sistema operacional.

free: [Seu valor aqui]
A quantidade de memória que está completamente não utilizada e disponível.

shared: [Seu valor aqui]
Memória usada por tmpfs e segmentos de memória compartilhada que podem ser acessados por múltiplos processos.

buff/cache: [Seu valor aqui]
Memória usada para buffers do kernel e cache de disco para melhorar o desempenho do sistema.

available: [Seu valor aqui]
Uma estimativa de quanta memória está disponível para iniciar novas aplicações sem swapping.

Para obter os valores atuais, você pode consultar seu arquivo memory_stats.txt salvo anteriormente.

Após adicionar o conteúdo, salve o arquivo pressionando Ctrl+O seguido por Enter, e então saia do nano pressionando Ctrl+X.

Visualizando a Memória em Diferentes Unidades

O comando free permite que você exiba a memória em diferentes unidades. Vamos criar um arquivo mostrando a memória em várias unidades:

free -b | head -2 > ~/project/memory_data/memory_units.txt
echo "Memória em bytes (acima)" >> ~/project/memory_data/memory_units.txt
echo "" >> ~/project/memory_data/memory_units.txt

free -k | head -2 >> ~/project/memory_data/memory_units.txt
echo "Memória em kilobytes (acima)" >> ~/project/memory_data/memory_units.txt
echo "" >> ~/project/memory_data/memory_units.txt

free -m | head -2 >> ~/project/memory_data/memory_units.txt
echo "Memória em megabytes (acima)" >> ~/project/memory_data/memory_units.txt
echo "" >> ~/project/memory_data/memory_units.txt

free -g | head -2 >> ~/project/memory_data/memory_units.txt
echo "Memória em gigabytes (acima)" >> ~/project/memory_data/memory_units.txt

Visualize o arquivo para ver a memória representada em diferentes unidades:

cat ~/project/memory_data/memory_units.txt

Isso ajuda você a entender como exibir informações de memória na unidade mais apropriada para suas necessidades.

Monitoramento de Memória em Tempo Real

Administradores de sistema frequentemente precisam monitorar o uso da memória ao longo do tempo para detectar tendências ou solucionar problemas. Nesta etapa, você aprenderá como monitorar o uso da memória em tempo real e criar um script simples para registrar o uso da memória em intervalos regulares.

Usando o Comando watch com free

O comando watch permite que você execute um comando periodicamente e exiba sua saída. Isso é muito útil para monitorar o uso da memória em tempo real:

watch -n 2 free -h

Este comando executa free -h a cada 2 segundos e mostra a saída atualizada. Você deve ver as estatísticas de memória sendo atualizadas em tempo real.

Para sair do comando watch, pressione Ctrl+C.

Usando free com a Opção Intervalo

O próprio comando free pode exibir o uso da memória em intervalos regulares. A sintaxe é:

free -s [segundos] -c [contagem]

Onde:

  • -s especifica o intervalo em segundos entre as atualizações
  • -c especifica quantas atualizações exibir

Vamos monitorar o uso da memória a cada 3 segundos por um total de 4 atualizações:

free -h -s 3 -c 4

Isso exibirá as estatísticas de memória 4 vezes, com uma pausa de 3 segundos entre cada atualização.

Criando um Script de Monitoramento de Memória

Vamos criar um script que registra informações de uso da memória em intervalos regulares. Primeiro, crie um novo arquivo de script:

nano ~/project/memory_data/memory_monitor.sh

Adicione o seguinte conteúdo ao arquivo:

#!/bin/bash

## Crie um arquivo de log com a data e hora atuais
log_file=~/project/memory_data/memory_log_$(date +%Y%m%d_%H%M%S).txt

## Escreva o cabeçalho no arquivo de log
echo "Log de Uso de Memória - Iniciado em $(date)" > $log_file
echo "Monitorando a cada 5 segundos por 5 leituras" >> $log_file
echo "----------------------------------------" >> $log_file

## Faça um loop 5 vezes, capturando informações de memória a cada 5 segundos
for i in {1..5}; do
  echo "Leitura $i - $(date)" >> $log_file
  free -h >> $log_file
  echo "----------------------------------------" >> $log_file
  sleep 5
done

echo "Monitoramento concluído em $(date)" >> $log_file
echo "Log salvo em $log_file"

Salve o arquivo pressionando Ctrl+O, depois Enter e saia com Ctrl+X.

Agora, torne o script executável:

chmod +x ~/project/memory_data/memory_monitor.sh

Execute o script:

~/project/memory_data/memory_monitor.sh

O script será executado por cerca de 25 segundos (5 segundos × 5 leituras) e criará um arquivo de log com informações de uso da memória. Após a conclusão, você verá uma mensagem indicando onde o arquivo de log foi salvo.

Para visualizar o arquivo de log:

cat ~/project/memory_data/memory_log_*

Este arquivo de log mostra como o uso da memória muda ao longo do tempo, o que é valioso para solucionar problemas relacionados à memória ou entender padrões de uso da memória.

Explorando Informações Avançadas de Memória

O Linux fornece informações de memória mais detalhadas além do que o comando free básico mostra. Nesta etapa, você explorará fontes adicionais de informações de memória e criará um resumo abrangente da memória.

Explorando /proc/meminfo

O arquivo /proc/meminfo contém informações detalhadas sobre a memória do seu sistema. Vamos examiná-lo:

head -20 /proc/meminfo

Este arquivo contém dezenas de valores relacionados à memória, incluindo:

  • MemTotal: RAM total utilizável
  • MemFree: Memória livre
  • MemAvailable: Memória disponível
  • Buffers: Memória usada por buffers do kernel
  • Cached: Memória usada para cache de arquivos
  • SwapTotal: Espaço total de swap
  • SwapFree: Espaço livre de swap

Vamos extrair algumas informações-chave deste arquivo:

grep -E "MemTotal|MemFree|MemAvailable|Buffers|Cached|SwapTotal|SwapFree" /proc/meminfo > ~/project/memory_data/meminfo_excerpt.txt

Visualize as informações extraídas:

cat ~/project/memory_data/meminfo_excerpt.txt

Criando um Resumo Abrangente de Memória

Agora, vamos criar um script que gera um relatório de resumo abrangente da memória. Crie um novo arquivo de script:

nano ~/project/memory_data/create_summary.sh

Adicione o seguinte conteúdo:

#!/bin/bash

## Define o arquivo de saída com timestamp
output_file=~/project/memory_data/memory_summary_$(date +%Y%m%d_%H%M%S).txt

## Cria o cabeçalho
echo "RELATÓRIO DE RESUMO DE MEMÓRIA DO LINUX" > $output_file
echo "===========================" >> $output_file
echo "Data: $(date)" >> $output_file
echo "" >> $output_file

## Estatísticas básicas de memória
echo "ESTATÍSTICAS BÁSICAS DE MEMÓRIA:" >> $output_file
free -h >> $output_file
echo "" >> $output_file

## Informações detalhadas de memória
echo "INFORMAÇÕES DETALHADAS DE MEMÓRIA:" >> $output_file
echo "RAM Total: $(grep MemTotal /proc/meminfo | awk '{print $2 " " $3}')" >> $output_file
echo "RAM Livre: $(grep MemFree /proc/meminfo | awk '{print $2 " " $3}')" >> $output_file
echo "RAM Disponível: $(grep MemAvailable /proc/meminfo | awk '{print $2 " " $3}')" >> $output_file
echo "Memória de buffer: $(grep Buffers /proc/meminfo | awk '{print $2 " " $3}')" >> $output_file
echo "Memória de cache: $(grep "^Cached:" /proc/meminfo | awk '{print $2 " " $3}')" >> $output_file
echo "" >> $output_file

## Informações de swap
echo "INFORMAÇÕES DE SWAP:" >> $output_file
echo "Swap Total: $(grep SwapTotal /proc/meminfo | awk '{print $2 " " $3}')" >> $output_file
echo "Swap Livre: $(grep SwapFree /proc/meminfo | awk '{print $2 " " $3}')" >> $output_file
echo "" >> $output_file

## Cálculo da porcentagem de uso da memória
total_mem=$(grep MemTotal /proc/meminfo | awk '{print $2}')
used_mem=$(grep MemTotal /proc/meminfo | awk '{print $2}')
used_mem=$((used_mem - $(grep MemFree /proc/meminfo | awk '{print $2}')))
used_mem=$((used_mem - $(grep Buffers /proc/meminfo | awk '{print $2}')))
used_mem=$((used_mem - $(grep "^Cached:" /proc/meminfo | awk '{print $2}')))
mem_percentage=$((used_mem * 100 / total_mem))

echo "RESUMO DE USO DE MEMÓRIA:" >> $output_file
echo "Porcentagem de uso da memória: ${mem_percentage}%" >> $output_file
echo "" >> $output_file

echo "Relatório de resumo de memória gerado em $output_file"

Salve o arquivo pressionando Ctrl+O, depois Enter e saia com Ctrl+X.

Torne o script executável:

chmod +x ~/project/memory_data/create_summary.sh

Execute o script para gerar o relatório de resumo:

~/project/memory_data/create_summary.sh

Após a conclusão do script, visualize o relatório de resumo gerado:

cat ~/project/memory_data/memory_summary_*

Este relatório abrangente oferece uma visão detalhada do status da memória do seu sistema, combinando dados de várias fontes.

Criando um Comando Simples de Status da Memória

Finalmente, vamos criar um comando de uma linha simples que mostra o status atual da memória em um formato conciso:

echo "Status da memória: $(free -h | grep Mem | awk '{print "Total:"$2, "Usado:"$3, "Livre:"$4, "Disponível:"$7}')" > ~/project/memory_data/memory_status.txt

Visualize o status da memória:

cat ~/project/memory_data/memory_status.txt

Este comando extrai as informações mais importantes da saída do comando free e as apresenta em um formato compacto.

Resumo

Neste laboratório, você explorou técnicas essenciais para monitorar e analisar o uso da memória em sistemas Linux. Você progrediu de relatórios básicos de memória para análises avançadas, adquirindo habilidades valiosas para administração e solução de problemas de sistemas.

Conceitos e habilidades-chave que você aprendeu:

  1. Relatório Básico de Memória: Você usou o comando free para visualizar estatísticas básicas de memória e aprendeu a interpretar as colunas de saída.

  2. Entendendo as Métricas de Memória: Você explorou o que cada métrica de memória significa (total, usado, livre, compartilhado, buff/cache, disponível) e como exibir a memória em diferentes unidades.

  3. Monitoramento em Tempo Real: Você aprendeu como monitorar o uso da memória em tempo real usando o comando watch e criou um script para registrar o uso da memória em intervalos regulares.

  4. Análise Avançada de Memória: Você explorou informações detalhadas de memória do arquivo /proc/meminfo e criou relatórios de resumo de memória abrangentes.

Essas habilidades são essenciais para uma administração de sistema eficaz, pois o gerenciamento de memória impacta diretamente o desempenho do sistema. Ao monitorar o uso da memória, você pode:

  • Identificar problemas de desempenho relacionados à memória
  • Determinar se um sistema precisa de mais recursos
  • Entender como os aplicativos usam a memória
  • Detectar vazamentos de memória ou uso excessivo de memória
  • Tomar decisões informadas sobre a otimização do sistema

As técnicas que você aprendeu neste laboratório fornecem uma base sólida para o gerenciamento de memória em sistemas Linux e podem ser expandidas com ferramentas de monitoramento e técnicas de automação mais avançadas.