Come limitare il consumo della CPU del tuo hosting

“Gentile cliente…”

Chissà perché quando ricevo una di queste email da un hosting provider comincio subito a preoccuparmi. Tutte le email che contengono una brutta notizia, di solito, cominciano così…

“Il tuo account ha raggiunto l’80% del limite giornaliero consentito di utilizzo della CPU ecc ecc…”

Se ti è mai capitato di ricevere una email che cominciava più o meno in questo modo, sei finito nel posto giusto.

Perché mi dovrei preoccupare di limitare il consumo della CPU?

Quando acquisti un servizio di hosting da un internet service provider, stai comprando, di fatto, delle risorse: spazio di memoria, RAM, CPU, banda, utilizzo del sistema operativo e del software, database, e così via.

Quando prendi un server dedicato, virtuale o no, come ad esempio quello di Amazon Web Services, di solito hai una percezione immediata e diretta di quello che stai acquistando. Puoi fare proprio la lista della spesa.

Voglio 20GB di hard disk, 2 CPU, 4 GB di RAM, ecc.

Quando invece acquisti un servizio di hosting condiviso, la maggior parte delle volte non hai tutte le informazioni precise e dettagliate di quello che stai acquistando.

Ti dicono che avrai banda illimitata, spazio illimitato, hard disk SSD velocissimi ma, di fatto, non è proprio così. Le risorse hardware, in generale sono limitate per forza di cose.

A volte, quindi, può capitare che ti arrivino messaggi “preoccupanti” e inaspettati dal tuo hosting provider, in cui ti viene richiesto di limitare l’utilizzo delle risorse, pena la chiusura dell’account.

Come possiamo fare a limitare un po’ i danni?

L’heartbeat di WordPress, questo sconosciuto.

Nella versione di WordPress 3.6 è stata introdotta, per la prima volta, l’API WordPress “Heartbeat”.

Serve per fare un polling continuo verso il server su cui è ospitato il tuo sito in WordPress, garantendo così l’aggiornamento e il salvataggio dei dati quasi in tempo reale.

Uno degli utilizzi utili di questa funzionalità, è quello di consentire a WordPress la gestione dei post quando ci sono più utenti collegati all’interno del backend.

L’heartbeat, utilizza il file /wp-admin/admin-ajax.php per far eseguire chiamate AJAX da browser.

Un’altra cosa a cui serve, è l’autosave dei post, fondamentale per non perdere tutti i dati quando abbiamo scritto righe su righe di un articolo e ci dimentichiamo di cliccare su “SALVA BOZZA” o “AGGIORNA”.

Ora forse diamo tutto questo per scontato, ma prima della versione 3.6 non era così.

L’unico piccolo problema è che, ogni tanto, ad esempio quando apriamo tante pagine del pannello di amministrazione e poi lasciamo tutto aperto e andiamo in pausa pranzo o a prendere un caffè e fare due chiacchiere con qualche collega, le richieste AJAX dalle API possono accumularsi e generare un utilizzo esagerato della CPU.

È proprio in quel momento che rischiamo di ricevere l’email “minatoria” dal nostro service provider.

Se poi contatti il supporto tecnico, la maggior parte delle volte ti viene proprio detto che il problema è il numero di chiamate esagerate provenienti dallo script /wp-admin/admin-ajax.php.

E tu gli vorresti dire, si ok, ho capito, ma che devo fare?

Ecco, quello che devi fare è tentare di limitare il numero di queste chiamate andando a lavorare sull’heartbeat.

Come possiamo rimediare?

La soluzione più drastica è quella di disattivare completamente l’heartbeat. Se sei l’unico amministratore di un sito web, e sei sicuro di non aver installato nessun plugin che abbia bisogno di utilizzare l’heartbeat per funzionare, o non hai bisogno di nessuna feature di WP per l’utilizzo della quale sia richiesto l’heartbeat,  potresti provare questa soluzione.

Per disabilitarlo, modifica il file functions.php del tuo tema e incolla queste linee subito dopo il tag di apertura:

add_action( 'init', 'stop_heartbeat', 1 );

function stop_heartbeat() {

wp_deregister_script('heartbeat');

}

Queste poche righe, dovrebbero disabilitarlo completamente.

Una soluzione meno drastica, invece, è quella di installare un plugin molto semplice che ti permetta di limitare la frequenza dell’heartbeat.

Come limitare la frequenza dell’heartbeat, con un plugin

Per prima cosa, cerca, installa e attiva il plugin “Heartbeat Control” come faresti con qualsiasi altro plugin gratuito.

Dopodiché, vai su Impostazioni -> Heartbeat Control, tab General Settings e poi, nelle 3 caselle

  • WordPress Dashboard
  • Frontend
  • Post editor

seleziona la voce Modify Heartbeat e modifica la frequenza.

Attenzione perché, da come viene indicato, potrebbe sembrare che aumentando il valore del parametro, aumenti la frequenza degli hearbeat (e quindi vai a peggiorare la situazione, impiegando più risorse).

In realtà, anche se c’è scritto “heartbeat frequency”, il valore indica il periodo dell’heartbeat. Ovvero, più semplicemente, ogni quanti secondi viene generato l’heartbeat.

Il valore di default è di 15 secondi, e quindi aumentando già a 100 secondi dovresti ottenere un notevole beneficio e una notevole riduzione delle risorse impiegate.

come limitare il consumo della CPU wordpress

Anche questo plugin, come il codice descritto all’inizio dell’articolo, in teoria ti permette di disabilitare completamente l’heartbeat.

Tuttavia ti suggerisco di modificare un po’ la frequenza prima di arrivare ad una soluzione così drastica e disabilitarlo completamente.

limitare utilizzo della cpu wordpress disabilitare heartbeat

Prova a vedere se ottieni un miglioramento e, se ti va, scrivi nei commenti le tue considerazioni.

Conclusioni

Vedere il proprio sito bloccato a causa di un utilizzo eccessivo delle risorse, peraltro indesiderato o imprevisto, può risultare davvero frustrante.

Tenere sotto controllo alcuni aspetti, come ad esempio l’utilizzo dell’heartbeat, per limitare il consumo della CPU dell’hosting provider, è fondamentale. Ma non è l’unica cosa che puoi fare.

Tra le altre azioni molto importanti che si possono fare, ad esempio, c’è anche l’utilizzo di un plugin di caching professionale e la configurazione di una CDN come Cloudflare.

Pertanto, se vuoi approfondire l’argomento e hai bisogno di un aiuto nell’ottimizzazione del tuo sito in WordPress, contattami qui. Ti risponderò il prima possibile e ti aiuterò a trovare una soluzione.

Ciao,

Massimiliano