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.