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ção | Descrição |
---|---|
-m | Mostra em Mega. |
-h | Mostra no formato "humano". |
-c | Mostra somente dados de CPU. |
-d | Mostra somente dados de Disco. |
-p | Mostra 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ção | Descrição |
---|---|
-d | Mostra 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ção | Descrição |
---|---|
-l (L) \<log_file> | Mostra os logs de um outro dia. |
-u | Mostra informações de CPU (igual rodar sem argumento). |
-r | Mostra a informação relacionadas a memória. |
-S | Mostra a informação de swap. |
-n DEV | Mostra dados das interfaces de rede. |
-d | Mostra I/O de disco. |
-b | Mostra o desempenho de leitura e gravação de disco |
-B | Dados 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/
.
SAR
Analisa e exibe relatórios dos dados coletados pelosadc
, 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 pelosa1
.
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ção | Descrição |
---|---|
-i | Exibe as estatística de todas as interfaces. |
-s | Exibe as estatística por protocolo. |
-a | Exibe as estatística de todos os sockets. |
-t | Filtra para pesquisas mostrando apenas TCP. |
-u | Filtra 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
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.