Il mio server è diventato lento: come controllare RAM, CPU e disco
Se il tuo server è rallentato, guarda tre cose: RAM, CPU e disco. Connettiti ed esegui tre comandi: free -h per la memoria, top per il processore e df -h per il disco. Quella che è piena è il collo di bottiglia. Se tutte e tre sembrano a posto, il problema di solito sta nell'applicazione stessa.
Parti dal carico
Il load average è il numero medio di processi in attesa della CPU o del disco. I primi tre numeri dell'output qui sotto sono le medie degli ultimi 1, 5 e 15 minuti. Confrontali con il tuo numero di core:
cat /proc/loadavg
nproc
Se il carico resta a lungo sopra il numero di core, il server non riesce a stare dietro al suo lavoro.
RAM: free -h
free -h
La colonna più importante è Disponibile. Se è molto piccola e la riga Swap si sta riempiendo, la RAM è finita. Quando la memoria finisce, il kernel termina uno dei processi che usano più memoria (l'OOM killer). Un database o un'applicazione web che si chiude da sola è spesso un segno di questo. Controlla così:
sudo dmesg -T | grep -i -E "out of memory|killed process"
CPU: top
top
Nella schermata che si apre, il tasto P ordina i processi per uso della CPU e il tasto M per uso della memoria. Premi q per uscire. Nella riga della CPU in alto, guarda questi valori:
- us: la quota dei processi utente. Se è alta, un'applicazione si sta mangiando la CPU.
- wa: il tempo passato ad aspettare l'input e l'output del disco. Se è alto, il problema non è la CPU ma il disco.
- st: il tempo "rubato" al server virtuale, cioè il tempo che il livello di virtualizzazione ha dato alla CPU per altro. Se resta alto, il problema potrebbe non essere dentro il tuo server. In quel caso contatta il supporto.
Disco: df -h
df -h
df -i
Il primo comando mostra lo spazio usato e il secondo il limite sul numero di file (inode). Quando il disco è completamente pieno, database e applicazioni non riescono a scrivere e il server rallenta o dà errori. Scopri cosa occupa lo spazio:
sudo du -xh / --max-depth=1 2>/dev/null | sort -h | tail -n 8
Se i log di sistema sono cresciuti, puoi ridurli con sudo journalctl --vacuum-size=200M. Se usi Docker, docker system df mostra lo spazio usato da immagini e container, e docker stats --no-stream mostra quanta CPU e memoria usa ogni container.
Sintomo, causa probabile e soluzione
| Sintomo | Causa probabile | Cosa fare |
|---|---|---|
| Le pagine sono lente a tratti, Disponibile è basso, lo swap è pieno | RAM insufficiente | Spegni i servizi che non ti servono e riduci le impostazioni di memoria dell'applicazione (per esempio il numero di worker PHP-FPM o la memoria del database). Se non basta, ingrandisci il server. |
Un servizio si chiude da solo, nell'output di dmesg compare "killed process" | La memoria è finita ed è intervenuto l'OOM killer | Aggiungi RAM o riduci l'uso di memoria. |
Un processo in top tiene occupato per intero un core | Un processo bloccato, un plugin difettoso o un ciclo | Trova il processo, poi correggi o disattiva l'applicazione o il plugin che lo causa. |
| Il carico è alto, la CPU è inattiva, wa è alto | Si aspetta il disco (molte scritture o swap) | Guarda le colonne si e so in vmstat 1 5. Se lo swap è in uso, aggiungi RAM. |
df -h o df -i è pieno | Spazio su disco o inode esauriti | Pulisci i file grandi e i log. Se continua a riempirsi, ingrandisci. |
| st resta alto | Il problema potrebbe essere fuori dal tuo server | Contatta il supporto. |
Su Seturack la velocità del disco di ogni server è limitata: 500 MB/s e 20.000 IOPS sostenuti in lettura, e 200 MB/s e 8.000 IOPS in scrittura. Se i tuoi valori nell'output di iostat -x 1 5 stanno su questi numeri, a rallentarti è il carico sul disco. Riduci il lavoro con il caching o distribuiscilo nel tempo. Se iostat non c'è, installalo con sudo apt install -y sysstat.
Quando aiuta lo swap?
Lo swap usa il disco al posto della RAM. Permette al server di superare brevi picchi di memoria senza l'OOM killer, ma non è veloce come la RAM. Se si e so nell'output di vmstat 1 5 restano sopra zero, il server scrive di continuo nello swap. La soluzione è la RAM, non lo swap. Se non hai swap (swapon --show non stampa nulla) e vuoi smussare i picchi, puoi aggiungere un file di swap da 2 GB. Questi comandi sono per un file system 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 le risorse sembrano a posto
Se RAM, CPU e disco sembrano a posto, controlla il nome del primo processo in top:
- Se in cima ci sono
php-fpm,apache2onginx, il problema di solito è il sito stesso: un plugin pesante, un caching mancante o un'impennata improvvisa di visitatori. - Se in cima ci sono
mysqldomariadbd, ci sono query lente. Attiva lo slow query log del database e guarda quali query durano a lungo. - Se un processo che non riconosci continua a mangiare la CPU, il server potrebbe essere stato compromesso. Cambia le password, controlla le sessioni aperte e l'output di
sudo ss -tulpne, se serve, reinstalla il server con un sistema pulito.
Quando ingrandire
L'ordine è: prima ottimizza, poi aggiungi caching, poi spegni il lavoro inutile. Se dopo questo il carico è ancora alto, ingrandisci il server. Nel pannello apri la scheda Dimensione del tuo server, sposta i cursori sulla nuova dimensione e conferma. Dopo il pagamento il server si riavvia una volta da solo e torna con la nuova dimensione. Il tuo indirizzo IP e i tuoi dati restano gli stessi e paghi solo la differenza per i giorni rimanenti. Puoi aumentare RAM, vCore e disco separatamente, così alzi solo ciò che scarseggia. Ingrandire fa crescere il disco, mentre ridurre non lo restringe. Per i dettagli, leggi l'articolo sul ridimensionamento.
Se il server non risponde affatto a causa del carico, SSH potrebbe non connettersi. In quel caso apri la Console VNC dal pannello oppure riavvia il server dal pannello.
Commenti0
Ancora nessun commento
Condividi per primo la tua opinione.
Accedi o registrati per lasciare un commento.