Entenda facilmente seu uso de RAM do Linux com o Smem

Publicados: 2022-01-29
Tela do laptop mostrando o logotipo do shell Bash sobre um pano de fundo vermelho
fatmawati achmad zaenuri/Shutterstock

O uso de memória do Linux pode ser difícil de interpretar e difícil de entender. Com o smem é fácil descobrir qual memória um processo está usando e quais processos estão usando mais.

Uso de memória

O Linux oferece muitas maneiras de verificar o que está acontecendo com a RAM do seu computador. O problema é que o gerenciamento de memória é um desafio complicado para o seu sistema operacional. Ele precisa fazer malabarismos com a RAM física, a RAM virtual na forma de espaço de troca e as demandas dos diferentes tipos de processos que estão sendo executados a qualquer momento.

Quanta RAM seu computador precisa para jogos de PC?
RELACIONADO Quanta RAM seu computador precisa para jogos de PC?

Os processos consomem RAM à medida que se carregam na memória. Eles então solicitam mais RAM para que tenham espaço para executar quaisquer tarefas para as quais foram projetados. Alguns processos dificilmente afetam a RAM, outros consomem muita memória.

O kernel e o resto do sistema operacional, seu ambiente de desktop e todos os aplicativos ou sessões de linha de comando que você executa estão clamando por uma parte da quantidade finita de RAM instalada em seu computador. Alguns processos geram outros processos. Alguns processos compartilham RAM com outros processos.

Como verificar o uso da memória do terminal Linux
RELACIONADO Como verificar o uso da memória do terminal Linux

Tentando decifrar tudo isso e chegar a uma resposta simples para a pergunta “Quanta RAM este programa ou processo está usando?” pode ser um desafio surpreendente. A granularidade é ótima e tem seu lugar, mas, igualmente, o excesso de informações pode ser um impedimento.

Propaganda

Por exemplo, usar cat para espiar o pseudo sistema de arquivos /proc/meminfo retornou 50 linhas de saída na máquina usada para pesquisar este artigo. Onde você começa?

 cat /proc/meminfo

E alguns utilitários do Linux dão respostas diferentes. Em nossa máquina de teste, tínhamos uma instância less em execução, que tinha um ID de processo de 2183.

Podemos usar o utilitário pmap com a opção -x (estendida) para obter uma imagem completa do uso de memória de um processo. Vamos usá-lo com o ID do processo de nossa instância de less :

 pmap -x 2183 

Consultando o mapa de memória de um único processo

Na parte inferior da saída, obtemos um total para o tamanho do conjunto residente, que é a quantidade de RAM principal que está sendo usada.

A saída do pmap para uma única instância de menos

Em seguida, usamos o utilitário ps com a opção -o (saída), selecionamos a coluna RSS e passamos o ID do processo da mesma instância de less :

 ps-o rss 2183 

Usando ps para ver o RSS da mesma instância de menos

Obtemos um resultado diferente. Esta é uma decisão de design por parte dos autores do ps . Isto é da página de man do ps :

Os campos SIZE e RSS não contam algumas partes de um processo, incluindo as tabelas de páginas, pilha de kernel, struct thread_info e struct task_struct. Isso geralmente é pelo menos 20 KiB de memória que é sempre residente. SIZE é o tamanho virtual do processo (código+dados+pilha).
Propaganda

Os autores de outros utilitários têm suas próprias opiniões sobre como medir o uso de RAM.

O RSS, o USS e o PSS

O tamanho do conjunto residente (RSS) é a quantidade de RAM alocada a um processo, excluindo o espaço de troca, mas incluindo qualquer RAM exigida pelas bibliotecas compartilhadas que o processo está usando.

Por que é bom que a RAM do seu computador esteja cheia
RELACIONADO Por que é bom que a RAM do seu computador esteja cheia

RSS quase sempre sobre-relata o uso de RAM. Se dois ou mais processos usarem uma ou mais bibliotecas compartilhadas, o RSS simplesmente adicionará o uso de RAM de cada biblioteca à sua contagem de uso de RAM para cada um desses processos. Além da imprecisão, há uma certa ironia nisso. Bibliotecas compartilhadas significam que cada processo não precisa carregar sua própria instância privada de uma biblioteca. Se a biblioteca já estiver na memória, ela a compartilhará e reduzirá a sobrecarga de RAM.

O Tamanho do Conjunto Proporcional tenta resolver isso dividindo a quantidade de memória compartilhada entre os processos que a estão compartilhando. Se houver quatro processos compartilhando alguma memória, o PSS informa que 25% da RAM compartilhada é usada por cada um desses processos. Esta é uma aproximação, mas se parece mais com o que está acontecendo do que a imagem que o RSS pinta.

O Tamanho do Conjunto Exclusivo é a quantidade de RAM que está sendo usada exclusivamente por um processo, seja ela consumida diretamente pelo processo ou usada por bibliotecas que estão sendo usadas exclusivamente pelo processo. Novamente, ele ignora o espaço de troca. Está interessado apenas em RAM física genuína.

USS e PSS são termos e conceitos que foram propostos por Matt Mackall, autor de smem .

O utilitário smem

O utilitário smem relata a memória usada por processos, usuários, mapeamento ou em todo o sistema. Em todas as distribuições que testamos, foi necessária a instalação. Para instalá-lo no Ubuntu, use este comando:

 sudo apt instalar smem 

Instalando o smem no Ubuntu

Para instalar smem no Fedora você precisa digitar:

 sudo dnf instalar smem 

Instalando o smem no Fedora

Para instalar smem no Manjaro, use:

 sudo pacman -Sy smem 

Instalando o smem no Manjaro

Propaganda

Usar smem sem opções fornece uma lista dos processos que estão usando RAM.

 smem 

Invocando smem sem opções de linha de comando

Uma tabela de informações é exibida na janela do terminal.

A saída padrão de smem

As colunas são:

  • PID : O ID do processo que está usando a memória.
  • User : O nome de usuário do usuário que possui o processo.
  • Comando : A linha de comando que iniciou o processo.
  • Swap : quanto espaço de troca o processo está usando.
  • USS : O Tamanho Único do Conjunto.
  • PSS : O Tamanho do Conjunto Proporcional.
  • RSS : O tamanho do conjunto residente.

Para ver os tamanhos expressos como porcentagens, use a opção -p (porcentagem).

 smem -p 

Usando a opção smem -p para solicitar porcentagens

Os tamanhos em bytes foram substituídos por porcentagens.

saída smem mostrando porcentagens

Para ver as figuras renderizadas de uma forma mais amigável, use a opção -k (abreviar). Isso reduz os números e adiciona indicadores de unidade.

 smem -k 

Usando a opção smem -k para mostrar tamanhos com indicadores de unidade

Em vez de bytes brutos, os tamanhos são mostrados em megabytes, gigabytes e assim por diante.

saída smem usando indicadores de unidade como K, M e G

Propaganda

Para adicionar uma linha de totais, use a opção -t (totais).

 smem -k -t 

Usando a opção smem -t para adicionar uma linha de totais à saída

A última linha da saída mostra os totais de cada coluna.

A linha de totais na parte inferior da saída smem

Refinando o relatório

Você pode pedir ao smem para relatar o uso de memória pelos usuários, mapeamento (bibliotecas) ou em todo o sistema. Para filtrar a saída por usuário, use a opção -u (usuário). Observe que, se você quiser ver mais do que apenas seu próprio uso, precisará executar smem com sudo .

 smem -u
 sudo smem -u 

Usando a opção smem -u com e sem sudo

Como você pode ver, a saída fica fora de forma para nomes de usuário com mais de oito caracteres.

Para ver o uso mapeado para as bibliotecas que estão em uso, independentemente de quais processos estão usando as bibliotecas, nem de quais usuários possuem esses processos, use a opção -m (mapeamento).

 smem -m -k -t 

Usando a opção smem -m para obter um relatório do mapeador

Também pedimos valores legíveis por humanos e um total.

O relatório mapeado smem mostrando o uso de memória por bibliotecas

Para ver o uso de memória em todo o sistema, use a opção -w (todo o sistema).

 smem -w -k -t 

O relatório de todo o sistema smem

Relatórios em um único programa

Com um pouco de magia de linha de comando, podemos relatar um único programa e todos os seus subprocessos. Vamos canalizar a saída do smem para tail e pedir ao tail para mostrar apenas a última linha. Diremos a smem para usar valores legíveis por humanos e fornecer um total. O total será a última linha, e essa é a tail da linha que será exibida para nós.

Propaganda

Usaremos a opção -c (colunas) com smem e informaremos quais colunas queremos incluir em nossa saída. Vamos restringir isso à coluna Tamanho do Conjunto Proporcional. A opção -P (filtro de processo) nos permite fornecer uma string de pesquisa para smem . Apenas as linhas de saída correspondentes serão incluídas.

 smem -c pss -P firefox -k -t | cauda -n 1 

Usando smem para mostrar o uso de memória por um processo e seus filhos

Essa é uma maneira rápida e organizada de descobrir o consumo de RAM de um programa e seus processos filhos.

Gerando gráficos

Você pode passar as opções --pie ou --bar para que o smem gere gráficos. É preciso dizer que, com muitas categorias, os gráficos rapidamente se tornam ininteligíveis, mas podem ser úteis para uma visão geral rápida.

O formato do comando é:

 smem --nome da torta -s uss 

Pedindo a smem para produzir um gráfico de pizza

O gráfico de pizza aparece em sua própria janela do visualizador.

Um gráfico de pizza smem em sua própria janela do visualizador

Para ver outros gráficos, use pss ou rss em vez de uss . Para ver um gráfico de barras, use --bar em vez de --pie .

Propaganda

Para que isso funcione, você precisará ter o Python instalado, juntamente com a biblioteca matplotlib . Eles já foram instalados nas distribuições Ubuntu, Fedora e Manjaro que testamos.

Boas coisas vêm em pequenos pacotes

O utilitário smem tem mais alguns truques na manga, e você é encorajado a verificar sua página de man . Seu repertório principal é o que descrevemos aqui, e é uma ótima ferramenta para ter em sua caixa de ferramentas CLI.

RELACIONADO: 37 comandos importantes do Linux que você deve conhecer