Skip to main content

200.1 Medir e Resolver problemas do uso de Recursos


Para usar alguns recursos vamos ter que instalar alguns pacotes, são eles:

# Instalando os pacotes necessários (para Redhat os nomes são os mesmos):
sudo apt install sysstat net-tools -y


IOSTAT


É uma ferramenta usada para monitorar o desempenho do sistema, focando principalmente em entrada/saída (I/O) de dispositivos de armazenamento e no uso da CPU. Ele exibe estatísticas sobre a atividade de discos, dispositivos de bloco e processadores, ajudando a identificar gargalos de desempenho relacionados a disco e CPU.

OpçãoDescrição
-mMostra em Mega.
-hMostra no formato "humano".
-cMostra somente dados de CPU.
-dMostra somente dados de Disco.
-pMostra as partições.
\<numero>Gera um relatório de tempos em tempos, o número fornecido é o tempo em segundos.

Vamos ver na prática:

# Usando 'iostat' sem argumento:
$ iostat
Linux 5.4.0-70-generic (ubuntu2004.localdomain) 07/13/21 _x86_64_ (2 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle
13.01 1.12 9.20 3.77 1.45 71.46

Device tps kB_read/s kB_wrtn/s kB_dscd/s kB_read kB_wrtn kB_dscd
loop0 0.03 0.03 0.00 0.00 1 0 0
vda 556.62 12740.52 3138.74 3417148.78 471654 116196 126502848

# %user = Aplicações a nível de CPU desde que a máquina foi iniciada.
# %nice = Processos com nice definido.
# %system = Uso de CPU pelo Kernel.
# %iowait = Quanto tempo a cpu ficou esperando algum procedimento de IO de disco. Se estiver alto, IO de disco pode estar impactando na performance da máquina.
# %steal = Quanto tempo a CPU virtual ficou esperando a CPU real dar o recurso para ela.

# tps = Transferencias por segundo.

# Usando o modo humano mais as partições:
$ iostat -hp
Linux 5.4.0-70-generic (ubuntu2004.localdomain) 07/13/21 _x86_64_ (2 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle
0.6% 0.1% 0.5% 0.2% 0.1% 98.5%

tps kB_read/s kB_wrtn/s kB_dscd/s kB_read kB_wrtn kB_dscd Device
0.00 0.0k 0.0k 0.0k 1.0k 0.0k 0.0k loop0
27.56 614.6k 215.4k 160.9M 460.7M 161.5M 120.6G vda
0.26 7.2k 0.2k 342.1k 5.4M 132.0k 256.4M vda1
0.12 4.4k 0.0k 0.0k 3.3M 0.0k 0.0k vda2
26.89 600.1k 215.2k 160.6M 449.9M 161.3M 120.4G vda3


# Gerando um relatório a cada 1 segundo por até 3 vezes:
$ iostat -c 1 3
Linux 5.4.0-70-generic (ubuntu2004.localdomain) 07/13/21 _x86_64_ (2 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle
0.51 0.04 0.39 0.17 0.08 98.81



avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 0.00 0.00 0.00 100.00



avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 0.00 0.00 0.00 100.00



VMSTAT


Semelhante ao iostat, mas exibe um pouco diferente.

OpçãoDescrição
-dMostra os dispositivos.
-p \<partição>Mostra uma partição específica.

$ vmstat 
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 512 2696788 194808 15319484 0 0 108 570 446 645 8 6 85 1 0

# r (ready) = Está na fila de processamento, está sendo ou vai ser executado.
# b (block) = Está bloqueado, pode estar esperando um processo de IO ser finalizado.

  • memory
    Exibe dados da memória.
    • swpd: Quantidade de memória swap em uso (em KB).
    • free: Memória livre disponível para uso (em KB).
    • buff: Quantidade de memória usada para buffers de I/O.
    • cache: Quantidade de memória usada para cache de arquivos.

# Verificando apenas dispositivos:
~$ vmstat -d
disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
loop0 1 0 2 0 0 0 0 0 0 0
loop1 0 0 0 0 0 0 0 0 0 0
loop2 0 0 0 0 0 0 0 0 0 0
loop3 0 0 0 0 0 0 0 0 0 0
loop4 0 0 0 0 0 0 0 0 0 0
loop5 0 0 0 0 0 0 0 0 0 0
loop6 0 0 0 0 0 0 0 0 0 0
loop7 0 0 0 0 0 0 0 0 0 0
vda 13568 7084 944812 11341 1647 3654 332952 18634 0 9

# Vendo apenas de um único device:
$ vmstat -p /dev/vda3
vda3 reads read sectors writes requested writes
13227 922866 1553 333384


MPSTAT


Também é bem similar aos comandos acima:

$ mpstat
Linux 5.4.0-70-generic (ubuntu2004.localdomain) 07/13/21 _x86_64_ (2 CPU)

20:24:14 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
20:24:14 all 0.36 0.03 0.27 0.12 0.00 0.01 0.07 0.00 0.00 99.15

# 20:24:14 = Hora realizado o comando.


SAR - System Activity Reporter


O SAR é uma ferramenta usada para monitorar a atividade do sistema em intervalos regulares. Ele coleta e exibe uma ampla gama de estatísticas relacionadas à performance, como uso da CPU, memória, swap, I/O de disco, rede e muito mais. Ao contrário de ferramentas como top ou vmstat, o sar é projetado para coleta e análise de dados a longo prazo, permitindo identificar tendências e possíveis gargalos ao longo do tempo. Caso você não tenha ele instalado, instale-o, ele fica no pacote sysstat.


O sar usa os dados armazenados em /var/log/sa/ (para distros baseadas em Debian) pelo sadc.

OpçãoDescrição
-l (L) \<log_file>Mostra os logs de um outro dia.
-uMostra informações de CPU (igual rodar sem argumento).
-rMostra a informação relacionadas a memória.
-SMostra a informação de swap.
-n DEVMostra dados das interfaces de rede.
-dMostra I/O de disco.
-bMostra o desempenho de leitura e gravação de disco
-BDados de paginação de memória.

$ sudo sar
Linux 5.4.0-70-generic (ubuntu2004.localdomain) 07/19/21 _x86_64_ (2 CPU)

20:32:44 LINUX RESTART (2 CPU)

20:35:01 CPU %user %nice %system %iowait %steal %idle
20:45:01 all 0.05 0.00 0.04 0.01 0.02 99.88
20:55:01 all 0.02 0.00 0.04 0.01 0.02 99.92
21:05:01 all 0.03 0.00 0.03 0.00 0.02 99.92
21:15:01 all 0.02 0.00 0.02 0.00 0.01 99.95
Average: all 0.03 0.00 0.03 0.01 0.02 99.92

# Verificando os logs de outro dia:
$ sudo sar -f /var/log/sysstat/sa02
Linux 5.4.0-42-generic (ubuntu2004.localdomain) 04/02/21 _x86_64_ (2 CPU)

12:47:08 LINUX RESTART (2 CPU)

12:48:30 LINUX RESTART (2 CPU)

12:55:01 CPU %user %nice %system %iowait %steal %idle
13:05:01 all 7.01 0.00 46.80 0.14 0.02 46.02
Average: all 7.01 0.00 46.80 0.14 0.02 46.02

# Outro dia:
$ sudo sar -f /var/log/sysstat/sa13
Linux 5.4.0-70-generic (ubuntu2004.localdomain) 07/13/21 _x86_64_ (2 CPU)

20:00:12 LINUX RESTART (2 CPU)

20:05:01 CPU %user %nice %system %iowait %steal %idle
20:15:01 all 0.01 0.00 0.03 0.01 0.03 99.91
20:25:01 all 0.03 0.00 0.06 0.01 0.04 99.86
Average: all 0.02 0.00 0.05 0.01 0.04 99.88

# Dados de memória:
$ sudo sar -r
Linux 5.4.0-70-generic (ubuntu2004.localdomain) 07/19/21 _x86_64_ (2 CPU)

20:32:44 LINUX RESTART (2 CPU)

20:35:01 kbmemfree kbavail kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
20:45:01 1589284 1748808 79128 3.89 60872 210648 225164 5.58 178420 133408 172
20:55:01 1587684 1747528 80224 3.94 60984 210792 225240 5.58 179804 132620 172
21:05:01 1585672 1745588 81864 4.02 61028 210808 227412 5.64 182428 131520 0
21:15:01 1585680 1745640 81840 4.02 61068 210812 225648 5.59 182484 131512 0
21:25:01 1587452 1747488 79948 3.93 61132 210816 227616 5.64 181224 131500 172
21:35:01 1587112 1747248 80096 3.94 61200 210844 221476 5.49 181216 131512 172
21:45:01 1587388 1747572 79788 3.92 61248 210836 221848 5.50 181300 131508 168
Average: 1587182 1747125 80413 3.95 61076 210794 224915 5.57 180982 131940 122

# Vendo o swap:
$ sudo sar -S
Linux 5.4.0-70-generic (ubuntu2004.localdomain) 07/19/21 _x86_64_ (2 CPU)

20:32:44 LINUX RESTART (2 CPU)

20:35:01 kbswpfree kbswpused %swpused kbswpcad %swpcad
20:45:01 1999868 0 0.00 0 0.00
20:55:01 1999868 0 0.00 0 0.00
21:05:01 1999868 0 0.00 0 0.00
21:15:01 1999868 0 0.00 0 0.00
21:25:01 1999868 0 0.00 0 0.00
21:35:01 1999868 0 0.00 0 0.00
21:45:01 1999868 0 0.00 0 0.00
Average: 1999868 0 0.00 0 0.00

# Vendo dados das interfaces de rede:
$ sudo sar -n DEV
# Removi a interface loopback da saída abaixo.

Linux 5.4.0-70-generic (ubuntu2004.localdomain) 07/19/21 _x86_64_ (2 CPU)

20:32:44 LINUX RESTART (2 CPU)

20:35:01 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
20:45:01 eth0 0.93 0.20 0.06 0.03 0.00 0.00 0.00 0.00
20:55:01 eth0 0.67 0.12 0.04 0.01 0.00 0.00 0.00 0.00
21:05:01 eth0 1.31 0.72 0.08 0.08 0.00 0.00 0.00 0.00
21:15:01 eth0 0.70 0.20 0.04 0.02 0.00 0.00 0.00 0.00
21:25:01 eth0 0.86 0.27 0.05 0.03 0.00 0.00 0.00 0.00
21:35:01 eth0 0.83 0.20 0.05 0.02 0.00 0.00 0.00 0.00
21:45:01 eth0 0.70 0.12 0.04 0.01 0.00 0.00 0.00 0.00
Average: eth0 0.86 0.26 0.05 0.03 0.00 0.00 0.00 0.00

# Vendo I/O de disco:
$ sudo sar -d
Linux 5.4.0-70-generic (ubuntu2004.localdomain) 07/19/21 _x86_64_ (2 CPU)

20:32:44 LINUX RESTART (2 CPU)

20:35:01 DEV tps rkB/s wkB/s dkB/s areq-sz aqu-sz await %util
20:45:01 dev252-0 0.66 5.96 2.89 0.00 13.34 0.00 0.83 0.06
20:55:01 dev252-0 0.32 0.25 1.78 0.00 6.29 0.00 1.07 0.04
21:05:01 dev252-0 0.12 0.01 0.69 0.00 6.06 0.00 1.99 0.02
21:15:01 dev252-0 0.10 0.01 0.59 0.00 5.74 0.00 1.15 0.01
21:25:01 dev252-0 0.20 0.01 1.10 0.00 5.61 0.00 1.04 0.02
21:35:01 dev252-0 0.13 0.05 0.69 0.00 5.62 0.00 1.41 0.02
21:45:01 dev252-0 0.11 0.00 0.62 0.00 5.72 0.00 1.58 0.01
21:55:01 dev252-0 0.13 0.40 0.75 0.00 8.54 0.00 1.91 0.02
22:05:01 dev252-0 0.10 0.00 0.60 0.00 5.90 0.00 1.16 0.01
22:15:01 dev252-0 0.10 0.00 0.56 0.00 5.79 0.00 0.83 0.01
Average: dev252-0 0.20 0.67 1.03 0.00 8.58 0.00 1.15 0.02
# O dev252-0 onde 252-0 é o Major.
# O número MAJOR corresponde ao tipo de dispositivo (ou driver) e pode ser encontrado em /proc/devices. Sendo 8 para sd (3 corresponde a IDE), 252 para virtblk entre outros. O número principal determina o driver de dispositivo a ser usado com este dispositivo.


Ativar ele no Debian

Se não estiver funcionando, verifique o arquivo abaixo:

$ cat /etc/default/sysstat
#### Ele deve estar com a variável 'ENABLED="true"'.

# Verifique também se o serviço está rodando:
$ sudo systemctl status sysstat.service
● sysstat.service - Resets System Activity Data Collector
Loaded: loaded (/lib/systemd/system/sysstat.service; enabled; vendor preset: enabled)
Active: active (exited) since Mon 2021-07-19 20:32:44 UTC; 18min ago
Docs: man:sa1(8)
man:sadc(8)
man:sar(1)
Process: 551 ExecStart=/usr/lib/sysstat/debian-sa1 --boot (code=exited, status=0/SUCCESS)
Main PID: 551 (code=exited, status=0/SUCCESS)

Jul 19 20:32:44 ubuntu2004.localdomain systemd[1]: Starting Resets System Activity Data Collector...
Jul 19 20:32:44 ubuntu2004.localdomain systemd[1]: Finished Resets System Activity Data Collector.

# Ative o serviço no Boot:
$ sudo systemctl enable sysstat.service

# Inicie o serviço:
$ sudo systemctl start sysstat.service

Ele consegue coletar informações porque é executado via Cron, já no CentOS 8 (e equivalentes), o agendamento das execuções dos processos do sysstat passou a ser feito através do systemd-timer ao invés da crontab.

# No Ubuntu 20.04:
$ cat /etc/cron.d/sysstat
# The first element of the path is a directory where the debian-sa1
# script is located
PATH=/usr/lib/sysstat:/usr/sbin:/usr/sbin:/usr/bin:/sbin:/bin

# Activity reports every 10 minutes everyday
5-55/10 * * * * root command -v debian-sa1 > /dev/null && debian-sa1 1 1

# Additional run at 23:59 to rotate the statistics file
59 23 * * * root command -v debian-sa1 > /dev/null && debian-sa1 60 2


SADC - System Activity Data Collector


O SADC é o componente responsável pela coleta de dados de atividade do sistema. Ele atua como o "cérebro" do sistema de monitoramento, sendo a parte que efetivamente coleta e grava as estatísticas sobre a performance do sistema, como CPU, memória, I/O, rede, e muito mais. No entanto, o SADC não trabalha sozinho: ele depende de outros dois componentes para realizar suas funções de forma eficaz.


O Crond é o daemon responsável por agendar e executar tarefas em segundo plano, como a coleta periódica de dados de desempenho. Ele é configurado para chamar o sadc em intervalos regulares (geralmente a cada 10 minutos) por meio de jobs cron. Esses agendamentos são definidos em arquivos de configuração do cron, geralmente localizados em /etc/cron.d/sysstat.


O sar é o componente que lê e apresenta os dados coletados pelo SADC, sendo o segundo componente.


SA1


O sa1 é um script auxiliar do SADC que executa a coleta de dados de desempenho do sistema e os armazena em arquivos binários. Esses dados são utilizados posteriormente pelo sar para gerar relatórios e análises detalhadas. O sa1 coleta métricas como uso de CPU, memória, I/O, rede, entre outros, e grava esses dados no diretório de logs apropriado. Os dados são armazenados no diretório /var/log/sa/ para distros padrão Redhat e em /var/log/sysstat/ para padrão Debian.


SA2


O sa2 é outro script auxiliar do SADC que tem a função de gerar um resumo diário com base nos dados coletados pelo sa1. Esse resumo contém uma visão geral da performance do sistema ao longo do dia, oferecendo uma síntese dos dados que foram coletados em intervalos curtos. O sa2 é geralmente executado uma vez por dia via cron, e ele processa os arquivos binários criados pelo sa1, condensando-os em um relatório de fácil análise.


LOGS


No padrão Debian, os logs ficam em /var/log/sysstat/ já no padrão Redhat, os logs ficam em /var/log/sa/.


resumo da ópera
  • SAR
    Analisa e exibe relatórios dos dados coletados pelo sadc, permitindo monitorar a performance do sistema.

  • SADC
    Coleta dados de desempenho do sistema diretamente do kernel e grava em arquivos binários.

  • SA1
    É um script que chama o SADC em intervalos regulares para realizar a coleta de dados e armazená-los em arquivos binários para análise futura.

  • SA2
    Gera resumos diários dos dados coletados pelo sa1.



NETSTAT


Usado para obter informações de Rede como conexões de rede, tabelas de roteamento, estatística de interfaces entre outros. Se usado sem argumento mostrará todas as conexões estabelecidas e sockets.


OpçãoDescrição
-iExibe as estatística de todas as interfaces.
-sExibe as estatística por protocolo.
-aExibe as estatística de todos os sockets.
-tFiltra para pesquisas mostrando apenas TCP.
-uFiltra para pesquisas mostrando apenas UDP.
-l (L)Exibe as conexões que estão em LISTEN (OUVINDO).

# Exibindo as estatísticas:
$ netstat -i
Kernel Interface table
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 569 0 124 0 405 0 0 0 BMRU
lo 65536 134 0 0 0 134 0 0 0 LRU

# Exibindo por protocolo (não vou colocar a saída toda!):
$ netstat -s
Ip:
Forwarding: 2
571 total packets received
4 with invalid addresses
0 forwarded
0 incoming packets discarded
566 incoming packets delivered
542 requests sent out
2 outgoing packets dropped
Icmp:
4 ICMP messages received
0 input ICMP message failed
ICMP input histogram:
destination unreachable: 4
9 ICMP messages sent
0 ICMP messages failed
ICMP output histogram:
destination unreachable: 9

# Exibindo por sockets (não vou colocar a saída toda!):
$ netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:domain 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp 0 0 lpic2:ssh _gateway:32874 ESTABLISHED
tcp6 0 0 [::]:ssh [::]:* LISTEN
udp 0 0 localhost:domain 0.0.0.0:*
udp 0 0 lpic2:bootpc 0.0.0.0:*
raw6 0 0 [::]:ipv6-icmp [::]:* 7
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 19845 /run/dbus/system_bus_socket
unix 2 [ ACC ] STREAM LISTENING 19848 /run/snapd.socket
unix 2 [ ACC ] STREAM LISTENING 19850 /run/snapd-snap.socket
unix 2 [ ACC ] SEQPACKET LISTENING 16451 /run/udev/control
unix 2 [ ACC ] STREAM LISTENING 19852 /run/uuidd/request
unix 2 [ ] DGRAM 25851 /run/user/1000/systemd/notify
unix 2 [ ACC ] STREAM LISTENING 25854 /run/user/1000/systemd/private
unix 2 [ ACC ] STREAM LISTENING 16420 /run/systemd/private
unix 2 [ ACC ] STREAM LISTENING 25859 /run/user/1000/bus
unix 2 [ ACC ] STREAM LISTENING 16422 /run/systemd/userdb/io.systemd.DynamicUser
unix 2 [ ACC ] STREAM LISTENING 25860 /run/user/1000/gnupg/S.dirmngr
unix 2 [ ACC ] STREAM LISTENING 25861 /run/user/1000/gnupg/S.gpg-agent.browser
unix 2 [ ACC ] STREAM LISTENING 25863 /run/user/1000/gnupg/S.gpg-agent.extra
unix 2 [ ACC ] STREAM LISTENING 16433 @/org/kernel/linux/storage/multipathd
unix 2 [ ACC ] STREAM LISTENING 25866 /run/user/1000/gnupg/S.gpg-agent.ssh
unix 2 [ ACC ] STREAM LISTENING 16431 /run/lvm/lvmpolld.socket


SS


Veja aqui



IPTRAF


Exibe informações de rede em tempo real, permitindo a criação de filtro enquanto se vê os pacotes trafegando. A interação com programa é feito através de um menu exibido através da cli.


Instale o iptraf com o comando abaixo.

$ sudo apt install iptraf


Processos


Veja uma documentação dos processos que foi elaboradas para a LPIC-1.


HTOP


Essa ferramenta é uma variante do top, utilizando algumas informações mais visuais para facilitar a identificação de informações. Para usá-la é necessário instalar.

$ sudo apt install htop


IOTOP


O iotop é uma ferramenta de monitoramento no Linux usada para exibir o uso de I/O de disco por processos ou threads, semelhante ao top, mas focado na atividade de entrada/saída (I/O). Ele ajuda a identificar quais processos estão consumindo mais recursos de I/O em tempo real, sendo útil para diagnosticar problemas de desempenho relacionados ao disco. Para usar o iotop é necessário instalar.

$ sudo apt install iotop

Apesar de obter informações de teclado e mouse porque eles usam Input/Output (somente input), eles não vão consumir CPU, mesmo que sejam em grande escala, são operações muito simples, nesse caso, usamos o iotop mais para ver discos e outros devices que possam estar consumindo toda ou boa parte da CPU.


Principais colunas:

  • PID
    ID do processo.

  • USER
    Usuário que executa o processo.

  • DISK READ
    Quantidade de dados lidos do disco por processo.

  • DISK WRITE
    Quantidade de dados escritos no disco.

  • SWAPIN
    Percentual de tempo que o processo passa esperando swap (memória virtual).

  • IO
    Percentual de uso total de I/O pelo processo.