Monitore CPU e Memória no Linux: 10+ Ferramentas Essenciais

Descubra como um processo individual ou o sistema como um todo está utilizando CPU e memória.

Como administrador de sistemas, é comum enfrentar situações em que um aplicativo fica lento ou não responde devido ao alto consumo de CPU, memória ou rede. Se o servidor hospeda apenas um processo, identificar o gargalo é simples. No entanto, em um servidor compartilhado, onde vários serviços operam simultaneamente, torna-se crucial descobrir qual deles está sobrecarregando os recursos.

Existem diversas ferramentas de monitoramento que oferecem essa funcionalidade de forma nativa. Contudo, se você não dispõe de uma ou prefere uma solução baseada em linha de comando, apresentamos algumas opções gratuitas!

top

Uma boa maneira de começar é analisar a saída dos comandos top ou htop para obter uma visão geral dos processos em execução.

Como demonstrado abaixo, essas ferramentas oferecem uma excelente visão sobre a utilização de recursos por cada processo. No exemplo, o processo do MySQL está consumindo 11,9% da CPU e 2,5% da memória.

top - 11:57:33 up 0 min,  1 user,  load average: 3.69, 0.96, 0.32
Tasks: 165 total,   2 running, 113 sleeping,   0 stopped,   0 zombie
%Cpu(s): 21.0 us,  5.5 sy,  0.0 ni, 70.5 id,  1.7 wa,  0.0 hi,  1.3 si,  0.0 st
KiB Mem :  7637308 total,  5802888 free,   849512 used,   984908 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  6495648 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                        
 1986 netdata   20   0 1738856 191560  22948 S  11.6  2.5   0:02.30 mysqld                                                                                                         
 3021 www-data  20   0  255288  78420  55484 S   6.6  1.0   0:01.55 php-fpm                                                                                                        
 3138 www-data  20   0  253096  79780  59228 S   6.6  1.0   0:00.92 php-fpm                                                                                                        
 3153 www-data  20   0  255116  79088  56472 S   5.0  1.0   0:00.70 php-fpm                                                                                                        
 3037 www-data  20   0  257200  81088  56216 S   4.3  1.1   0:01.50 php-fpm                                                                                                        
 3048 www-data  20   0  257088  78740  55380 S   4.3  1.0   0:01.46 php-fpm                                                                                                        
 3054 www-data  20   0  254160  72168  52108 S   3.7  0.9   0:01.32 php-fpm                                                                                                        
 3135 www-data  20   0  255084  75912  54836 S   3.7  1.0   0:00.91 php-fpm                                                                                                        
 3051 www-data  20   0  254096  73804  51964 S   3.0  1.0   0:01.38 php-fpm                                                                                                        
 2962 www-data  20   0   45280   7284   3488 R   2.0  0.1   0:00.22 openresty                                                                                                      
 1062 netdata   20   0  338748  76144   6720 S   1.0  1.0   0:01.31 netdata                                                                                                        
 1702 netdata   20   0   21852   4232   2352 S   1.0  0.1   0:00.34 apps.plugin                                                                                                    
 1729 netdata   20   0   18636   3280   2764 S   0.7  0.0   0:00.05 bash                                                                                                           
 1980 netdata   20   0   62008  12896   5796 S   0.7  0.2   0:00.14 redis-server                                                                                                   
   11 root      20   0       0      0      0 I   0.3  0.0   0:00.14 rcu_sched                                                                                                      
 1007 root      20   0 1347424  74524  38872 S   0.3  1.0   0:00.92 dockerd                                                                                                        
 1857 root      20   0   10600   5564   4276 S   0.3  0.1   0:00.03 containerd-shim                                                                                                
 2045 root      20   0    9948   6028   5016 S   0.3  0.1   0:00.14 forego                                                                                                         
 2934 root      20   0   13616   8760   5928 S   0.3  0.1   0:00.07 docker-gen                                                                                                     
 2966 systemd+  20   0   25784   7924   2340 S   0.3  0.1   0:00.06 nginx

O comando top já vem instalado na maioria das distribuições Linux.

Após identificar o processo suspeito, você pode focar nele em vez de monitorar todos os processos. Para isso, ainda pode usar o comando top com um argumento específico:

Se você conhece o ID do processo (PID), utilize o comando:

top -p $PID

Abaixo está um exemplo de top -p 3102:

top - 11:59:56 up 3 min,  1 user,  load average: 0.72, 0.70, 0.31
Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
%Cpu(s):  7.1 us,  2.9 sy,  0.0 ni, 89.1 id,  0.3 wa,  0.0 hi,  0.7 si,  0.0 st
KiB Mem :  7637308 total,  5802024 free,   783672 used,  1051612 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  6555636 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                        
 3102 www-data  20   0  329500  82376  60640 S   0.0  1.1   0:03.35 php-fpm

Você também pode usar grep junto com o comando top. Veja um exemplo de monitoramento do uso do Docker:

[email protected]:~# top | grep docker
 1007 root      20   0 1347424  74524  38872 S   0.3  1.0   0:01.38 dockerd                                                                                                        
 2934 root      20   0   14676   9652   5928 S   0.3  0.1   0:00.54 docker-gen                                                                                                     
 1007 root      20   0 1347424  74524  38872 S   0.3  1.0   0:01.39 dockerd                                                                                                        
 1007 root      20   0 1347424  74524  38872 S   1.0  1.0   0:01.42 dockerd                                                                                                        
 2934 root      20   0   14740   9652   5928 S   0.3  0.1   0:00.55 docker-gen                                                                                                     
 2934 root      20   0   14740   9652   5928 S   0.3  0.1   0:00.56 docker-gen

htop

Similar ao top, porém com mais detalhes e uma interface mais amigável. O htop exibe a coluna de comando, útil para identificar o caminho do processo, e também utiliza cores para facilitar a visualização.

O htop pode não vir instalado por padrão, mas você pode instalá-lo facilmente com os comandos abaixo.

Instale o htop no Ubuntu

apt-get install htop

Instale o htop no CentOS/RHEL 8.x

dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
dnf update
dnf install htop

glances

Como o nome sugere, o glances oferece um panorama geral do uso do sistema em uma única tela. Os processos em execução são classificados de acordo com o consumo de CPU.

Você pode instalar o glances no CentOS 8 usando o DNF:

dnf install glances

Para CentOS 7, utilize o YUM:

yum install glances

atop

Similar aos anteriores, o atop possui um recurso interessante: a capacidade de gravar a saída em um arquivo, permitindo que você analise os dados posteriormente. Isso é especialmente útil para identificar problemas que ocorrem em um determinado período. Você pode agendar a gravação de dados usando o crontab ou ferramentas semelhantes e reproduzir a saída em outro momento.

Para gravar a saída em um arquivo:

atop -w nome_do_arquivo

Para reproduzir:

atop -r nome_do_arquivo

O atop oferece diversas opções, como intervalo de gravação e número de amostras. Consulte a página do manual para mais detalhes.

Se você deseja monitorar em tempo real, basta executar o comando atop e verá uma saída similar à imagem abaixo.

A instalação é feita com o comando:

dnf install atop

ps

Vamos agora analisar o comando ps.

Com o comando ps e o PID, você pode verificar o uso da CPU e da memória:

ps -p $PID -o %cpu,%mem

A saída terá um formato similar a este:

[email protected]:~# ps -p 1048 -o %cpu,%mem
%CPU %MEM
 0.2  3.0
[email protected]:~#

nmon

O nmon é uma ferramenta interativa de linha de comando que permite monitorar CPU, memória, discos, rede, NFS e memória virtual. Para exibir os processos com maior uso, execute nmon e pressione a tecla ‘t’.

A instalação é feita com:

dnf install nmon

Monit

Monit é uma solução de código aberto, com interface web e linha de comando, para monitorar recursos do servidor, daemons, arquivos, diretórios, sistemas de arquivos, entre outros.

O Monit também oferece widgets atraentes:

Monit é uma ferramenta de monitoramento leve e versátil.

Monitorix

O Monitorix é um utilitário leve e de código aberto para monitoramento de servidores Linux. Ele possui um servidor HTTP embutido para acesso via web. Entre os relatórios disponíveis, estão:

  • Kernel/temperatura
  • Sistema de arquivos e E/S
  • Tráfego de rede
  • Apache/Mail/FTP/Nginx
  • MySQL/Varnish/Memcached

O Monitorix também permite configurar alertas para notificação em caso de problemas. É uma ótima opção para gerenciamento de servidores em nuvem e para quem busca uma solução proativa de monitoramento.

Netdata

Netdata é uma ferramenta de monitoramento de desempenho em tempo real para recursos do sistema, aplicações, servidores web, bancos de dados, DNS, e-mail, sensores de hardware e muito mais. É de código aberto e fácil de configurar. Os dados são coletados, armazenados e apresentados de forma interativa. Com coleta a cada segundo, você não perde nenhum detalhe.

Amplamente utilizado por diversas empresas.

Não perca mais tempo, comece agora a controlar seus servidores Linux.

btop

btop é um monitor de recursos interativo com uma interface gráfica amigável que auxilia no gerenciamento de servidores Linux.

Você pode visualizar os processos em formato de árvore, filtrar a lista de processos e gerenciar os processos que mais consomem recursos. O btop também possui gráficos de escala automática que exibem o uso da rede.

Além disso, é possível verificar a velocidade do disco e a atividade completa de E/S.

Essa ferramenta oferece diversas outras funcionalidades para Linux, FreeBSD e macOS.

Conclusão

Espero que as ferramentas apresentadas o ajudem a monitorar seus servidores em tempo real para que possa tomar as decisões necessárias. Se você está começando como administrador de sistemas e deseja obter um treinamento prático, confira este curso da Udemy.