Como monitorar CPU e memória no Linux?

Saiba quanto um processo individual ou em todo o sistema consome CPU ou memória.

Como administrador de sistema, você geralmente precisa lidar com um incidente em que o aplicativo está lento ou sem resposta devido à alta utilização de CPU/memória/rede. Se o servidor hospedar apenas um processo, é fácil descobrir quando o processo consome todos os recursos. No entanto, imagine um servidor compartilhado onde vários serviços estão sendo executados e você precisa descobrir qual deles está consumindo todos os recursos.

Existem muitos softwares de monitoramento que fazem isso fora da caixa. Mas se você não tiver um ou estiver procurando uma solução baseada em comandos, aqui está. Eles são todos GRATUITOS!

topo

Você pode querer começar examinando o resultado top ou htop para ver a visão geral dos processos.

Como você pode ver abaixo, dá uma excelente ideia sobre o que todos os processos estão utilizando. Se você olhar para o primeiro, que é o MySQL está tomando 11,9% da CPU e 2,5% da CPU.

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 top está instalado em quase todas as distribuições Linux.

  Como desfragmentar um disco rígido no Linux

Depois de identificar o suspeito, você pode se concentrar nesse processo em vez de tudo como você viu acima. Você ainda pode usar o comando top, mas com algum argumento.

Digamos que você saiba o id do processo (PID); você pode usar o comando abaixo.

top -p $PID

Abaixo 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 com top. Abaixo um exemplo de verificação de utilização 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

Semelhante ao topo, mas com mais informações. Como você pode, ele tem a coluna de comando, que é útil para identificar o caminho do processo. E também é colorido.

  Como obter gestos do touchpad do Macbook no Linux

htop pode não ser instalado por padrão, mas você sempre pode fazê-lo conforme 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

olhares

Como o nome diz, você obtém uma visualização da utilização do sistema em uma única tela. Os processos em execução são classificados por sua utilização da CPU.

Você pode instalar olhares no CentOS 8 usando DNF como abaixo.

dnf install glances

para CentOS7, você pode usar YUM

yum install glances

em cima

Um semelhante ao listado acima, mas com um recurso brilhante para gravar a saída em um arquivo para que você possa visualizá-los mais tarde. Imagine que há um padrão de ter um problema em uma janela de tempo específica. Você pode agendar para gravar a saída em um arquivo por meio do crontab ou outro e, posteriormente, pode reproduzir.

Para gravar a saída em um arquivo:

atop -w filename

e, para reproduzir:

atop -r filename

Ele suporta vários argumentos como intervalo, amostras, etc. e eu recomendo fortemente dar uma olhada na página do manual.

Se você estiver interessado apenas na solução de problemas em tempo real, basta executar no topo e você verá como abaixo.

Você pode instalar em cima como abaixo.

dnf install atop

ps

Vamos verificar o comando ps agora.

Você pode usar o comando ps com o PID para imprimir sua utilização de CPU e memória.

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

A saída deve ficar assim.

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

nmon

Ferramenta interativa de monitoramento de linha de comando para utilização de CPU, memória, discos, rede, NFS e memória virtual. Para visualizar o processo superior (por utilização), você pode executar nmon e pressionar o botão t.

  Como proteger uma unidade flash USB no Linux

Você pode instalar o nmon como abaixo.

dnf install nmon

Monitorar

Monitorar é uma solução de código aberto baseada na web e de linha de comando para monitorar recursos do servidor, daemons, arquivos, diretório, sistemas de arquivos, etc.

Monit também ganhou um widget legal.

Seu software de monitoramento leve. Mas, há mais para explorar aqui.

Monitorix

Um utilitário leve de código aberto para monitorar o servidor Linux. Monitorix tem HTTP embutido para que você possa verificar a utilização e outras coisas na web. Alguns dos outros relatórios de uso incluem:

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

O Monitorix também oferece configuração de alertas para que você seja notificado quando as coisas não estiverem bem. Será uma boa escolha quando você estiver gerenciando servidores baseados em nuvem e procurando uma solução de monitoramento proativo.

Dados de rede

Dados de rede é um monitoramento de desempenho em tempo real para recursos do sistema, aplicativos, servidores web, bancos de dados, DNS, correio, sensores de hardware e muito mais. É de código aberto e começar é fácil. Todos os dados são coletados, armazenados e transmitidos para você visualizar interativamente. Os dados são coletados a cada segundo, para que você nunca perca nada.

Amado por muitos líderes da indústria.

Então, o que você está esperando, tente assumir o controle de seus servidores Linux.

btop

btop é um prático monitor de recursos totalmente interativo com uma bela interface de usuário que o ajuda a gerenciar os servidores Linux.

Você pode visualizar facilmente os processos em uma visualização em árvore, filtrar a partir da lista de processos e gerenciar os hogs de recursos. O btop também vem equipado com um gráfico de dimensionamento automático que mostra o uso da rede.

Além disso, você também pode verificar a velocidade do disco e a atividade de E/S completa.

Há mais do que isso que você pode experimentar no Linux, FreeBSD e macOS.

Conclusão

Espero que as ferramentas acima o ajudem a visualizar a utilização do servidor em tempo real para que você possa tomar as medidas necessárias. Se você acabou de começar como administrador de sistema e deseja obter treinamento prático, confira este Curso Udemy.