Como determinar a memória usada por um processo no Linux, com o utilitário pmap

O utilitário pmap tem a função de exibir um mapa do uso da memória por um ou vários processos.
Com ele, é possível obter um valor, em KB, da quantidade de memória RAM usada por um programa, no seu sistema.
Você precisa informar apenas o PID (Process ID) do programa, para o pmap.
Para obter o PID, use o comando ps.
Use o ps para obter o PID de algum processo. No exemplo, abaixo, veja como obter esta informação sobre o navegador Firefox:


ps aux | grep firefox

justinc+  1889 46.2 10.6 3262532 839236 tty2   Sl+  09:21   9:00 /usr/lib/firefox-esr/firefox-esr
justinc+ 13572  0.0  0.0  12784   992 pts/0    S+   09:40   0:00 grep --color=auto firefox

O PID é exibido na 2a coluna. No meu caso, é 1889.
Agora, basta oferecer este número ao pmap:


pmap 1889

O mapa pode ser bastante extenso e você pode informar mais de um PID, se quiser.
Ao final, é exibido o total de memória (em KB) usada pelo processo.
Use o comando grep, para obter uma visualização mais resumida:


pmap 1889 | grep -i total

 total          3270732K

Você também irá encontrar informações sobre a memória ocupada por processo no diretório /proc ou com os utilitários ps ou top.
O problema destas alternativas é que será necessário calcular o valor total da memória usada “manualmente”, ou seja, adicionar os valores de memória compartilhada, mapeada e virtual, entre outros.
Já o pmap oferece o valor total, de mais fácil compreensão, ao final da listagem.

Use o progress para monitorar processos no Linux

O utilitário progress permite observar o andamento de processos dentro do coreutils.
A ferramenta, escrita em C e voltada para os sistemas operacionais GNU/Linux, exibe o progresso de comandos básicos, como o cp, mv, dd, tar, cat, rsync, grep, fgrep, egrep, cut, sort, md5sum, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum, adb, gzip, gunzip, bzip2, bunzip2, xz, unxz, lzma, unlzma, zcat, bzcat, lzcat etc.

O GNU Core Utilities ou coreutils são o conjunto de utilitários básicos para manipulação de texto, de arquivos e da shell dos sistemas operacionais GNU/Linux.

Se um destes estiver rodando, o progress irá capturar e exibir informações sobre a transferência de dados, o tempo que ainda falta para finalizar etc.
Embora não venha instalado em algumas distribuições, é fácil encontrar o pacote de instalação nos repositórios.
No Debian, use o apt, para fazer a instalação:


sudo apt install progress

Se um dos comandos, citados acima, estiver em execução, a qualquer momento o progress pode capturar informações sobre ele.
Experimente com um procedimento mais demorado, como o cp, para copiar uma quantidade de arquivos grandes de uma unidade para outra.
No meu exemplo, abaixo, iniciei a cópia de um arquivo de backup de mais de 1 GB para uma unidade flash USB.


cp -r Música/ /media/justincase/yellow/ &
[1] 1056

Usei o ‘&’, acima, para enviar o processo para o segundo plano e liberar o terminal para o próximo comando:


progress -w

[ 1056] cp /home/justincase/Música/arquivo-de-musica.flac
    74.9% (32.5 MiB / 43.4 MiB)

Como você pode ver, acima, o progress exibe o progresso da cópia do arquivo atual (74%) e sai.
Você pode invocar o programa outras vezes, para saber o andamento da cópia.
Se achar melhor, pode combiná-lo com o watch, para poder observar o progresso on the fly:


watch progress -w

captura de tela progresso do comando de cópia no Linux
Veja um exemplo de acompanhamento da verificação do shasum da imagem ISO do Ubuntu:


sha512sum ubuntu-17.10-desktop-amd64.iso & watch progress -w

Se houver processos dos coreutils rodando, a ferramenta irá captar e exibir informações sobre todos eles.
Para obter uma visualização mais enxuta, use a opção ‘-q’:


progress -q

[ 2119] sha256sum /home/justincase/Downloads/ubuntu-17.10-desktop-amd64.iso
    7.4% (105.3 MiB / 1.4 GiB)

[ 2118] sha512sum /home/justincase/Downloads/ubuntu-17.10-desktop-amd64.iso
    11.5% (164.3 MiB / 1.4 GiB)

Neste modo, o tempo restante para a conclusão (remaining) de cada processo não é exibido.
Para enxugar, mais ainda, a linha de comando, use as opções ‘-m’ ou ‘-M’.
Elas substituem o uso do watch!


progress -m

Outra vantagem do uso de ‘-m’, é que a tela fica menos suja, após a execução dos comandos, e permite ver melhor o resultado de cada.
O ‘-M’, mantém o monitoramento continuadamente.
Este pode ser ideal, para execução em um terminal à parte, onde os coreutils podem ser capturados e monitorados o tempo todo no seu sistema.

Referências

https://www.gnu.org/software/coreutils/coreutils.html.

https://pt.wikipedia.org/wiki/GNU_Core_Utilities.

Use o comando watch para monitorar processos em execução

O utilitário watch é usado no Linux para rodar outros programas periodicamente e exibir resultados atualizados.
O que ele faz é reexecutar programas, até que você o mande parar.
Para interromper o seu andamento, use as teclas ^C (Ctrl + c).
O watch aceita parâmetros e opções para determinar de quanto em quanto tempo ele deve rodar novamente um comando.
Segue alguns exemplos de uso.

Como monitorar o uso das unidades de armazenamento do seu sistema

Você pode observar o espaço livre de todos os drives (internos, externos ou remotos) conectados ou montados no seu sistema ao combinar o comando df com o watch.
Veja um exemplo:


watch df -h

Como padrão, o watch reexecuta seu comando a cada 2 segundos.
linux free watch
Você pode alterar este comportamento com a opção ‘-n’ ou ‘–interval’:


watch --interval 0.5 du -h

Na linha acima, ajustei o intervalo entre uma execução e outra para meio segundo.
Desta vez, usei o comando du, que mostra a ocupação (ou uso) de cada diretório montado no sistema.
linux disk usage
Note que o watch exibe, no canto superior esquerdo da tela, o intervalo de tempo entre cada execução do programa: Every 0,5s (ou seja, “a cada meio segundo”), na imagem acima.

O comando df (disk free) mostra o espaço livre em uma unidade montada.
O du (disk used ou disk usage) mostra o uso ou a ocupação dos diretórios atuais

Como monitorar o uso da memória no Linux

O comando free é usado para mostrar a quantidade de memória livre, em diversos locais (RAM, SWAP etc).
Você pode usar o watch para verificar como o uso dos programas no seu computador afetam a memória do sistema.
Experimente o seguinte:


watch free

Aqui também é possível estabelecer um intervalo de atualização.
A visualização pode ficar mais interessante, se você permitir ao watch destacar os dados que sofreram alterações:


watch --differences --interval 0.1 free

Note que o menor intervalo possível é 0.1 segundos.
linux free memory

Outros exemplos de uso do watch

É possível encontrar outros exemplos de uso no manual do comando (man watch).
Por exemplo, para monitorar os arquivos que sofrerem algum tipo de modificação ou edição, no diretório atual, use o comando da seguinte forma:


watch -d 'ls -l'

Este tipo de comando é mais usado no diretório de logs ou no sistema de arquivos proc.

Como verificar quais portas estão abertas, com nmap

O nmap e o netstat são ferramentas tradicionais de monitoramento da rede no Linux e no UNIX.
O primeiro é comumente usado em filmes sobre hackers (ou crackers), por que tem uma “saída bonitinha” 😉
nmap list listening ports
Recentemente escrevi sobre como mudar a porta de escuta do servidor SSH, como medida bastante efetiva de segurança contra ataques. Neste caso, é útil saber quais portas estão em uso, para evitar conflitos entre serviços no seu sistema.
Neste contexto, o nmap e o netstat também podem ajudar a descobrir pontos vulneráveis do seu sistema.
Veja um exemplo de uso do nmap:


sudo nmap -sT -O localhost 

[sudo] senha para justincase:          

Starting Nmap 7.50 ( https://nmap.org ) at 2017-07-03 16:33 -03
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000092s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 998 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
631/tcp open  ipp
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.8 - 4.9
Network Distance: 0 hops

OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 2.61 seconds

Destaquei, acima, o trecho em que se exibe as portas abertas (open). Aqui é mais adequado usar o comando grep, para filtrar e exibir apenas os números das portas abertas:


sudo nmap -sT -O localhost | grep -i open

22/tcp  open  ssh
631/tcp open  ipp

Entenda melhor o comando:

  • -sT — trata-se de uma opção inteira, como é possível ver no manual do comando (use ‘man nmap’, para ver mais).
    Esta opção manda o nmap fazer um rastreio da conexão TCP.
  • -O — faz a tentativa de detectar o sistema operacional sobre o qual está sendo pedida a varredura.
    A detecção permite habilitar testes específicos da plataforma analisada durante o processo.

Se acrescentarmos a opção -A, podemos obter detalhamentos da versão do sistema operacional e dos daemons:


sudo nmap -sT -O -A localhost | grep -i open

22/tcp  open  ssh     OpenSSH 7.5p1 Debian 5 (protocol 2.0)
631/tcp open  ipp     CUPS 2.2

Inclua as portas relacionadas ao protoclo UDP também:


sudo nmap -sT -sU localhost

Starting Nmap 7.50 ( https://nmap.org ) at 2017-07-03 17:26 -03
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00017s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 1994 closed ports
PORT     STATE         SERVICE
22/tcp   open          ssh
631/tcp  open          ipp
68/udp   open|filtered dhcpc
631/udp  open|filtered ipp
1900/udp open|filtered upnp
5353/udp open|filtered zeroconf

Nmap done: 1 IP address (1 host up) scanned in 2.81 seconds

Você pode combinar as opções do comando acima — com a obtenção do mesmo resultado – da seguinte forma:


sudo nmap -sTU localhost

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Projeto A3 — Software auto-reparável já é uma realidade.

Pesquisadores da Universidade de Utah têm trabalhado em projetos de softwares com capacidade de, não somente, se recuperar de danos causados por vírus, como também defender-se de futuros ataques vindos da mesma fonte.
eric-eide-1-selfrepairin
Os engenheiros desenvolveram softwares que são capazes de detectar e erradicar, até mesmo, vírus desconhecidos e outros tipos de malwares — e, automaticamente, reconstroem o sistema, reparando os danos.
Além disto, o software impede o invasor de infectar novamente o sistema.
O A3 é uma suite de aplicativos que trabalha com uma máquina virtual — projetado para vigiar seu sistema operacional e aplicativos.
A suite é projetada para proteger servidores ou computadores de porte similar, que rodam sistemas operacionais Linux.
Aplicações militares também são contempladas pelo projeto.
O nome A3 corresponde a Advanced Adaptive Applications — Aplicações Adaptáveis e Avançadas, em uma tradução livre.
Foi desenvolvido em conjunto com a Raytheon BBN, empresa do setor de defesa, sediada em Massachusetts —, por sua vez, fundada pela Clean-Slate Design of Resilient, Adaptive, Secure hosts, um programa da (famosa) agência DARPADefense Advanced Research Projects Agency.

“A ideia é usar a tecnologia de hypervisor e máquinas virtuais, como base para defender uma aplicação escolhida pelo usuário.
Se uma ameaça consegue penetrar a segurança e se for detectada, o ambiente A3 pode responder (1) tentando consertar a aplicação e sua VM, (2) reiniciando a aplicação a partir de um checkpoint e/ou (3) com o uso de um replay e da introspecção da VM, diagnosticar a ameaça a partir dos sintomas percebidos no sistema — uma vez compreendido o quadro geral, será possível implementar medidas defensivas e a readequação do sistema.”

O projeto foi concluído em Setembro/2014, após 4 anos de trabalhos — e não há planos de desenvolver versões para computadores domésticos ou laptops, embora isto seja possível no futuro.
De acordo com Eric Eide, professor assistente de ciência da computação da Universidade de Utah, as tecnologias A3 podem chegar aos produtos de consumo algum dia, o que poderá ajudá-los a proteger-se contra malwares ou corrupção interna de componentes de software — “Mas ainda não fizemos esta experiência”.
Em vez de realizar uma busca por vírus, comparando o alvo infeccioso com descrições em um catálogo, o A3 detecta vírus desconhecidos e código malicioso a partir da percepção de que algo não está funcionando bem no sistema.
Ele pode parar a ação do intruso e reparar os danos, além de aprender a nunca mais permitir que aquele malware entre e aja dentro da máquina novamente.
Uma vez que os militares têm interesse na cibersegurança proporcionada pelo A3, aplicada a seus sistemas de missão crítica, o A3 também poderia ser usado em dispositivos de consumidor final.
Serviços web, como o da Amazon, também são candidatos.
Se um vírus ou um ataque tentar derrubar o serviço, o A3 poderia pará-lo e consertar os danos, antes mesmo deles tirarem o serviço do ar.
O infame bug Shellshock foi usado para demonstrar a eficácia do software para oficiais da DARPA, em Jacksonsville, na Florida, ainda em Setembro deste ano.
O ataque do Shellshock foi detectado e parado em um dos servidores Web. Os danos foram reparados em 4 minutos.

Referências

Fonte: University of Utah. (2014, November 13). Self-repairing software tackles malware. ScienceDaily. Retrieved November 24, 2014 from www.sciencedaily.com/releases/2014/11/141113140011.htm.