Quali sono le cause del sovraccarico del server? 8 cause comuni
Pubblicato il 30 ottobre 2026

Il sovraccarico del server raramente è un mistero, se si controllano i segnali giusti. Se le pagine sono lente, le richieste scadono o i grafici della CPU si attestano vicino al 100%, la domanda immediata è: cosa causa il sovraccarico del server in questo specifico ambiente? Può trattarsi di un volume di lavoro superiore a quello che il server riesce a elaborare, dell'esaurimento di una risorsa o di un'applicazione in attesa di qualcosa di più lento a valle.
Il sintomo visibile può essere un sito web lento, ma la causa principale può dipendere dai worker PHP, dalle query al database, dall'I/O del disco, dalle connessioni di rete, dai processi in background o dal traffico indesiderato. Considerare ogni sovraccarico un motivo per aggiungere semplicemente altra CPU è costoso e spesso non permette di individuare il vero problema. Per prima cosa, individua il collo di bottiglia. Poi decidi se correggerlo, ottimizzarlo, proteggerlo o aumentare la capacità.
Le cause più comuni del sovraccarico del server
Il sovraccarico del server si verifica quando la domanda supera la capacità disponibile di una o più risorse. Il principale indiziato è di solito la CPU, ma non è l'unico. Un server può mostrare un utilizzo ridotto della CPU mentre gli utenti continuano ad aspettare perché la memoria è esaurita, i dischi sono occupati, le connessioni al database sono bloccate o un servizio a monte risponde lentamente.
1. Un picco reale di traffico
Una campagna di marketing di successo, il lancio di un prodotto, una menzione sui media o un'agenzia che pubblica contemporaneamente diversi siti dei clienti possono generare un numero di visitatori simultanei superiore a quello previsto dall'applicazione. La parola chiave è simultanei. Diecimila visitatori nell'arco di una giornata possono essere facili da gestire; qualche centinaio di persone che caricano pagine dinamiche nello stesso minuto è una situazione del tutto diversa.
In genere, distribuire file statici come immagini e fogli di stile costa poco, se la cache è configurata correttamente. Le richieste dinamiche sono più pesanti perché possono avviare processi applicativi, eseguire codice, interrogare un database, creare sessioni e chiamare API esterne. È opportuno prestare particolare attenzione alle procedure di pagamento e-commerce, ai pannelli di controllo degli account, alle pagine di ricerca e alle attività di amministrazione di WordPress.
Controlla il volume delle richieste, le connessioni simultanee, le variazioni dei tempi di risposta e gli URL più richiesti. Se il traffico è legittimo, aumentare le risorse può essere la scelta giusta, ma prima è possibile ridurre il costo di ogni visita grazie alla cache e ai miglioramenti dell'applicazione.
2. Codice applicativo inefficiente
Un singolo percorso di esecuzione lento può sovraccaricare un VPS o un server dedicato, anche se dimensionato adeguatamente. Tra gli esempi più comuni ci sono i cicli che elaborano troppi dati, le pagine che eseguono ripetute query al database, la generazione di immagini gestita male e le chiamate API eseguite in modo sincrono a ogni caricamento di pagina.
Una richiesta lenta non è un problema solo per un singolo visitatore. Impegna un worker o un processo più a lungo, consentendo alle richieste in coda di accumularsi. Ben presto i worker disponibili si esauriscono e il server web inizia a restituire errori 502, 503 o di timeout. Ecco perché anche un livello di traffico moderato può causare un incidente di grande portata.
I log dell'applicazione e il tracciamento delle richieste di solito chiariscono la situazione. Controlla quali endpoint richiedono più tempo, se i tempi di risposta sono cambiati dopo una distribuzione e se nello stesso momento è stata eseguita un'importazione pianificata o un aggiornamento di un plugin. Se necessario, ripristina una versione difettosa, quindi analizza il percorso interessato prima di tentare una correzione definitiva.
3. Pressione sul database e query lente
Per molte applicazioni aziendali, è il database il primo componente a mostrare segni di affaticamento del server. Indici mancanti, scansioni di tabelle di grandi dimensioni, righe bloccate, troppe connessioni simultanee e query che ordinano o uniscono grandi insiemi di dati possono far aumentare rapidamente la latenza del database.
Quando le richieste al database rallentano, i worker dell'applicazione restano in attesa. Questi worker in attesa consumano memoria e slot di connessione, trasferendo poi la pressione al livello web. È una piccola reazione a catena operativa, per nulla elegante, ma facile da correggere se individuata per tempo.
Esamina i log delle query lente, le connessioni attive, le attese per i blocchi e i piani di esecuzione delle query. Aggiungere un indice a una colonna filtrata spesso può risolvere il problema meglio che raddoppiare le dimensioni del server. D'altra parte, un carico di lavoro SaaS in crescita potrebbe davvero richiedere un server database separato, più memoria per la cache o repliche di lettura. La risposta dipende dal tipo di query, non dal logo del piano di hosting.
4. Esaurimento della memoria e swapping
Quando i processi attivi richiedono più RAM di quella disponibile sul server, il sistema operativo può iniziare a trasferire le pagine di memoria sul disco. La memoria su disco è molto più lenta della RAM, quindi le prestazioni possono calare nettamente anche se l'utilizzo della CPU non è elevato. Nei casi più gravi, il sistema operativo può terminare un processo tramite la protezione contro l'esaurimento della memoria.
La pressione sulla memoria è spesso causata da un numero eccessivo di worker PHP, Node.js, Java o Python; da una cache del database sovradimensionata; da limiti dei container troppo permissivi; oppure da una perdita di memoria che si aggrava nel corso di più giorni. Un riavvio può riportare temporaneamente il servizio alla normalità, ma i log e le metriche storiche dovrebbero spiegare perché la memoria ha iniziato a esaurirsi.
Controlla la memoria disponibile, l'attività di swap, la memoria residente per processo e gli eventi di esaurimento della memoria. Imposta limiti realistici per i worker, così che un'applicazione sotto carico non possa consumare fino all'ultimo byte di memoria e mandare in errore anche i servizi vicini.
5. Colli di bottiglia nell'I/O del disco e spazio di archiviazione esaurito
Un server può avere CPU disponibile ed essere comunque sovraccarico perché i dischi gestiscono troppe operazioni di lettura e scrittura. Carichi di lavoro che usano intensamente il database, backup eseguiti nel momento sbagliato, file di log che crescono senza rotazione, scansioni antimalware e importazioni di file di grandi dimensioni possono tutti causare attese di I/O.
Anche la capacità di archiviazione è importante. Un disco quasi pieno può impedire ai database di scrivere tabelle temporanee, bloccare l'aggiornamento dei log, compromettere le distribuzioni e causare comportamenti creativi ma poco utili nei servizi. Mantieni spazio libero disponibile, invece di considerare l'utilizzo del disco al 100% un obiettivo raggiunto.
Monitora la latenza del disco, gli IOPS, le attese di I/O e l'utilizzo del filesystem. Quando possibile, pianifica i backup che richiedono molte risorse al di fuori degli orari di punta, conserva solo i log necessari e verifica che i processi di backup non entrino in competizione aggressiva con l'attività del database in produzione.
6. Bot, crawler e traffico da attacchi denial-of-service
Non tutto il traffico proviene dai clienti. I crawler aggressivi possono richiedere migliaia di pagine costose da generare, i bot di accesso possono colpire ripetutamente gli endpoint di autenticazione e gli attacchi distribuiti di tipo denial-of-service possono consumare larghezza di banda, connessioni o worker dell'applicazione.
Un grafico del traffico, da solo, non permette di distinguere un pubblico entusiasta da automazioni ostili. Esamina i log di accesso per individuare intervalli IP ripetuti, user agent insoliti, frequenze di richiesta elevate e richieste a URL costosi o inesistenti. Un'ondata improvvisa di richieste 404 non è traffico utile, anche se sul grafico sembra impressionante.
La limitazione della frequenza, le regole di un firewall per applicazioni web, i controlli sui bot, le risposte di errore memorizzate nella cache e la protezione DDoS a monte possono impedire alle richieste indesiderate di raggiungere il livello applicativo. Non applicare blocchi indiscriminati senza verificarne l'impatto su clienti reali, partner o crawler dei motori di ricerca.
7. Attività in background eseguite nel momento sbagliato
I processi cron, i worker delle code, i backup, la generazione di report, la conversione di immagini, le scansioni di sicurezza e i processi di sincronizzazione dei dati sono tutte normali attività di gestione di un servizio. I problemi iniziano quando queste attività coincidono con i picchi di traffico, vengono eseguite più spesso del previsto o avviano processi duplicati dopo un controllo del blocco non riuscito.
Un report notturno può essere innocuo alle 2 del mattino. e diventare un problema alle 10. Anche una coda che non riesce a stare al passo può riprovare i processi non riusciti finché non genera un picco di traffico. Controlla gli elenchi dei processi, i log dello scheduler, la profondità della coda e la durata dei processi. Poi distribuisci nel tempo le attività più pesanti, limita la concorrenza e sposta le attività non urgenti al di fuori dei periodi di punta per gli utenti.
8. Problemi delle dipendenze e accumulo di connessioni
Il server potrebbe funzionare correttamente, mentre un gateway di pagamento, un provider di posta elettronica, un resolver DNS, un servizio di object storage o un'API interna è lento. Se l'applicazione attende troppo a lungo quella dipendenza, le richieste si accumulano e i worker restano occupati. Alla fine l'applicazione sembra sovraccarica perché mantiene aperte troppe richieste.
Imposta timeout ragionevoli per le connessioni e le risposte, nuovi tentativi con backoff e meccanismi di circuit breaker per i servizi non critici. Memorizza le risposte nella cache quando è opportuno. Soprattutto, rendi visibili nel monitoraggio i guasti esterni, così i team non passano un'ora a ottimizzare la CPU per un problema che si trova al di fuori del server.
Come individuare il vero collo di bottiglia
Durante un incidente, inizia dalla cronologia degli eventi. Individua il momento in cui i tempi di risposta sono aumentati, quindi confronta CPU, RAM, swap, I/O del disco, throughput di rete, frequenza delle richieste, latenza del database e tassi di errore nello stesso intervallo. La correlazione non è una prova, ma permette di restringere rapidamente il campo di ricerca.
Poi esamina le attività in corso. Quali processi utilizzano CPU o memoria? I worker web sono occupati, inattivi o in attesa? Quali query al database sono attive? Le attese di I/O del disco sono elevate? Ci sono migliaia di connessioni provenienti da un numero limitato di origini? Il monitoraggio storico è fondamentale, perché quando qualcuno accede al server questo potrebbe essere già tornato alla normalità.
Un sistema di monitoraggio adeguato dovrebbe segnalare le tendenze prima che vengano notate dai visitatori. Il monitoraggio FASTCARE di Kodu.cloud può offrire questa visione operativa, mentre il supporto gestito aiuta a trasformare un picco sul grafico in un'azione concreta, anziché in un gioco di supposizioni a notte fonda.
Come prevenire il sovraccarico senza pagare per capacità inutilizzata
Pianificare la capacità non significa acquistare il server più grande disponibile e sperare di non avere problemi. Significa misurare l'utilizzo normale, comprendere i picchi e mantenere un margine di capacità ragionevole. Per molti carichi di lavoro, mantenere l'utilizzo sostenuto di CPU e memoria al di sotto dei limiti massimi lascia al sistema spazio per assorbire picchi, processi non riusciti e crescita del traffico.
Usa la cache per i contenuti che non devono essere generati ogni volta. Ottimizza le query e gli indici del database. Imposta limiti per i pool di worker e per la concorrenza delle code. Ruota i log, verifica i backup e pianifica la manutenzione tenendo conto del carico di produzione. Per le applicazioni con una domanda in crescita, separa gradualmente i ruoli: i processi web, i database, i servizi di cache e i worker in background non devono necessariamente competere per le risorse di un'unica macchina per sempre.
Verifica anche il ripristino, non solo le prestazioni. Un backup disponibile che non consente un ripristino rapido è di scarso aiuto in caso di guasto dello storage. Anche gli avvisi di monitoraggio che non portano ad alcuna azione sono solo decorativi. Assegna le responsabilità, tieni a portata di mano una checklist per gli incidenti e assicurati che qualcuno possa accedere al server, ai log, ai backup e al supporto del provider quando la situazione si fa difficile.
Il sovraccarico del server è gestibile se viene trattato come un problema di capacità osservabile, anziché come un'interruzione casuale. Tieni sotto controllo i segnali, proteggi i percorsi più sollecitati e correggi per prima la parte più lenta. Il servizio può tornare a funzionare senza problemi e il tuo team non dovrebbe doverlo sorvegliare tutta la notte.
Andres Saar, ingegnere dell'assistenza clienti








