FNSP Web Page

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.90

Os 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 st

A linha que interessa é esta, e as letras dizem tudo:

  • us alto — são os programas. Culpa da aplicação.

  • sy alto — é o núcleo. Muitas chamadas ao sistema, ou muita rede.

  • wa alto — está tudo à espera do disco. É o caso do exemplo: 62% do tempo à espera, e o processador quase parado.

  • st alto — 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       200Mi

A 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 disco

Nú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 -i

Parece 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 estado

Só 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.

Comentários

Ainda ninguém comentou este artigo.

Voltar ao blog

Gostávamos de saber quantas pessoas visitam o site, com o Google Analytics. Sem a sua autorização não corre nada. Política de Privacidade.