O meu servidor ficou lento: como verificar a RAM, o CPU e o disco
Se o seu servidor ficou lento, olhe para três coisas: RAM, CPU e disco. Ligue-se e execute três comandos: free -h para a memória, top para o processador e df -h para o disco. O que estiver cheio é o ponto de estrangulamento. Se os três parecerem bem, o problema costuma estar na própria aplicação.
Comece pela carga
A carga média é o número médio de processos à espera do CPU ou do disco. Os três primeiros números do resultado abaixo são as médias dos últimos 1, 5 e 15 minutos. Compare-os com o seu número de núcleos:
cat /proc/loadavg
nproc
Se a carga se mantiver durante muito tempo acima do número de núcleos, o servidor não consegue dar conta do trabalho.
RAM: free -h
free -h
A coluna mais importante é available. Se for muito pequena e a linha Swap estiver a encher, a RAM acabou. Quando a memória se esgota, o kernel termina um dos processos que mais memória usam (o OOM killer). Uma base de dados ou uma aplicação web que se fecha sozinha é muitas vezes sinal disto. Verifique assim:
sudo dmesg -T | grep -i -E "out of memory|killed process"
CPU: top
top
No ecrã que abre, a tecla P ordena os processos pela utilização do CPU e a tecla M ordena-os pela utilização da memória. Prima q para sair. Na linha do CPU, no topo, veja estes valores:
- us: a parte dos processos de utilizador. Se for alta, uma aplicação está a devorar o CPU.
- wa: tempo passado à espera de entrada e saída do disco. Se for alto, o problema não é o CPU, mas o disco.
- st: tempo «roubado» ao servidor virtual, ou seja, tempo que a camada de virtualização deu ao CPU para outra coisa. Se se mantiver alto, o problema pode não estar dentro do seu servidor. Nesse caso, contacte o suporte.
Disco: df -h
df -h
df -i
O primeiro comando mostra o espaço usado e o segundo mostra o limite do número de ficheiros (inodes). Quando o disco está completamente cheio, as bases de dados e as aplicações não conseguem escrever, e o servidor fica lento ou dá erros. Descubra o que está a ocupar o espaço:
sudo du -xh / --max-depth=1 2>/dev/null | sort -h | tail -n 8
Se os registos do sistema cresceram, pode reduzi-los com sudo journalctl --vacuum-size=200M. Se usa o Docker, o docker system df mostra o espaço usado por imagens e contentores, e o docker stats --no-stream mostra quanto CPU e memória cada contentor usa.
Sintoma, causa provável e solução
| Sintoma | Causa provável | O que fazer |
|---|---|---|
| As páginas estão lentas de vez em quando, o available está baixo, o swap está cheio | RAM insuficiente | Desligue os serviços de que não precisa e reduza as definições de memória da aplicação (por exemplo, o número de workers do PHP-FPM ou a memória da base de dados). Se não chegar, aumente o servidor. |
Um serviço fecha-se sozinho, aparece «killed process» no resultado do dmesg | A memória esgotou-se e o OOM killer entrou em ação | Acrescente RAM ou reduza a utilização de memória. |
Um processo no top mantém um núcleo inteiro totalmente ocupado | Um processo bloqueado, um plugin com defeito ou um ciclo | Encontre o processo e depois corrija ou desative a aplicação ou o plugin que está por trás dele. |
| A carga é alta, o CPU está livre, o wa é alto | Está-se à espera do disco (muitas escritas ou swap) | Veja as colunas si e so em vmstat 1 5. Se o swap estiver em uso, acrescente RAM. |
df -h ou df -i está cheio | Sem espaço em disco ou sem inodes | Limpe ficheiros grandes e registos. Se continuar a encher, aumente o servidor. |
| O st mantém-se alto | O problema pode estar fora do seu servidor | Contacte o suporte. |
Na Seturack, a velocidade do disco de cada servidor é limitada: 500 MB/s e 20 000 IOPS sustentados em leitura, e 200 MB/s e 8000 IOPS em escrita. Se os seus valores no resultado de iostat -x 1 5 estiverem nestes números, a carga do disco é o que o está a atrasar. Reduza o trabalho com cache ou distribua-o no tempo. Se o iostat não existir, instale-o com sudo apt install -y sysstat.
Quando ajuda o swap?
O swap usa o disco no lugar da RAM. Permite ao servidor aguentar picos curtos de memória sem o OOM killer, mas não é tão rápido como a RAM. Se si e so no resultado de vmstat 1 5 se mantiverem acima de zero, o servidor está constantemente a escrever no swap. A solução é RAM, não swap. Se não tem swap (swapon --show não mostra nada) e quer suavizar os picos, pode adicionar um ficheiro de swap de 2 GB. Estes comandos são para um sistema de ficheiros ext4:
sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile
sudo mkswap /swapfile && sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Se os recursos parecerem bem
Se a RAM, o CPU e o disco parecerem folgados, verifique o nome do processo no topo do top:
- Se o
php-fpm, oapache2ou onginxestiver no topo, o problema costuma ser o próprio site: um plugin pesado, falta de cache ou um salto súbito de visitantes. - Se o
mysqldou omariadbdestiver no topo, há consultas lentas. Ative o registo de consultas lentas da base de dados e veja quais demoram. - Se um processo que não reconhece continuar a devorar o CPU, o servidor pode ter sido comprometido. Altere as suas palavras-passe, verifique as sessões abertas e o resultado de
sudo ss -tulpne, se for preciso, reinstale o servidor com um sistema limpo.
Quando aumentar
A ordem é: otimizar primeiro, acrescentar cache, desligar o trabalho desnecessário. Se a carga continuar alta depois disso, aumente o servidor. No painel, abra o separador Tamanho do seu servidor, mova os controlos deslizantes para o novo tamanho e confirme. Depois do pagamento, o servidor reinicia uma vez sozinho e volta com o novo tamanho. O seu endereço IP e os dados mantêm-se, e só paga a diferença pelos dias restantes. Pode aumentar a RAM, os vCores e o disco em separado, por isso só aumenta o que está a faltar. Aumentar faz crescer o disco, enquanto reduzir não o encolhe. Para mais pormenores, veja o artigo sobre redimensionamento.
Se o servidor não responder de todo por causa da carga, o SSH pode não ligar. Nesse caso, abra a consola VNC a partir do painel, ou reinicie o servidor a partir do painel.
Comentários0
Ainda não existem comentários
Seja a primeira pessoa a partilhar a sua opinião.
Inicie sessão ou crie uma conta para deixar um comentário.