O servidor está lento: cinco comandos por esta ordem
«O servidor está lento» é a queixa mais inútil que existe, porque pode ser meia dúzia de coisas completamente diferentes. O que serve é uma ordem fixa para as excluir, e cinco comandos chegam.
1. Há carga?
uptime
# 14:03:11 up 32 days, load average: 8.42, 6.15, 3.90Os três números são a média de um, cinco e quinze minutos. Comparam-se com o número de núcleos: quatro núcleos com carga 4 estão cheios; com carga 0,5 estão a dormir.
A ordem entre eles diz mais do que o valor. A subir — 8, 6, 4 — é um problema a agravar-se agora. A descer é uma tempestade que já passou, e vale mais a pena perceber o que a provocou do que agir à pressa.
Um pormenor que confunde muita gente: em Linux a carga não é só processador. Processos parados à espera do disco contam. Carga alta com processador a dormir é um sintoma frequente, e aponta noutra direção.
2. De onde vem?
top
# %Cpu(s): 12.3 us, 4.1 sy, 0.0 ni, 21.0 id, 62.4 wa, 0.0 hi, 0.2 si, 0.0 stA linha que interessa é esta, e as letras dizem tudo:
usalto — são os programas. Culpa da aplicação.syalto — é o núcleo. Muitas chamadas ao sistema, ou muita rede.waalto — está tudo à espera do disco. É o caso do exemplo: 62% do tempo à espera, e o processador quase parado.stalto — só em máquinas virtuais, e é o pior de todos: significa que o anfitrião está a dar o processador a outra pessoa. Não há nada a fazer de dentro.
3. Está a trocar memória com o disco?
free -h
# total used free shared buff/cache available
# Mem: 7.8Gi 6.1Gi 184Mi 88Mi 1.5Gi 1.2Gi
# Swap: 2.0Gi 1.8Gi 200MiA coluna a ler é available, não free. O que está em buff/cache é memória a ser bem usada — o núcleo devolve-a mal alguém precise dela.
O sinal de alarme é a segunda linha. Swap ocupado não é grave por si; grave é estar a ser usado agora, e isso vê-se noutro sítio:
vmstat 2 5
# as colunas si e so: páginas a entrar e a sair do discoNúmeros grandes e constantes ali explicam sozinhos qualquer lentidão. O disco é milhares de vezes mais lento do que a memória, e é isso que está a acontecer a cada acesso.
4. O disco está cheio?
df -h
df -iParece deslocado numa lista sobre lentidão, e não é: um disco a 100% faz tudo falhar de formas estranhas antes de dar um erro claro. O segundo comando é o dos inodes, e é o que ninguém corre — está explicado no artigo do disco cheio.
5. Conforme o que o passo 2 apontou
iostat -x 2 # se wa estava alto: ver %util e await por disco
ss -s # se sy estava alto: quantas ligações, em que estadoSó aqui se desce ao detalhe, e já com uma direção. Correr estes dois primeiro é o erro habitual: dão muita informação sobre o sítio errado.
O resumo
Carga, depois de onde vem, depois memória, depois disco, e só então o detalhe. A ordem não é gosto: cada passo elimina metade das hipóteses, e sem ela passam-se vinte minutos a ler gráficos de uma coisa que não era o problema.