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:
total: A quantidade total de memória (RAM) instalada no sistema.
used: A quantidade de memória atualmente sendo usada pelo sistema.
free: A quantidade de memória que não está sendo usada para nada no momento.
shared: Memória compartilhada por múltiplos processos, frequentemente usada por tmpfs (sistemas de arquivos temporários) e segmentos de memória compartilhada.
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
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:
-sespecifica o intervalo em segundos entre as atualizações-cespecifica 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ávelMemFree: Memória livreMemAvailable: Memória disponívelBuffers: Memória usada por buffers do kernelCached: Memória usada para cache de arquivosSwapTotal: Espaço total de swapSwapFree: 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:
Relatório Básico de Memória: Você usou o comando
freepara visualizar estatísticas básicas de memória e aprendeu a interpretar as colunas de saída.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.
Monitoramento em Tempo Real: Você aprendeu como monitorar o uso da memória em tempo real usando o comando
watche criou um script para registrar o uso da memória em intervalos regulares.Análise Avançada de Memória: Você explorou informações detalhadas de memória do arquivo
/proc/meminfoe 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.



