Prestazioni PHP
Quando si parla di prestazioni di WordPress, un maggior numero di thread PHP non significa automaticamente migliori prestazioni; ci sono diversi fattori da considerare:
- Caching. Un caching efficace può ridurre il carico di lavoro dei thread PHP servendo i contenuti in cache invece di generarli dinamicamente per ogni richiesta. Questo può migliorare notevolmente le prestazioni, soprattutto per le risorse a cui si accede di frequente.
- Hardware. Le risorse hardware disponibili sul server, come CPU, memoria (RAM) e velocità del disco, hanno un impatto diretto sulle prestazioni dei thread PHP. Risorse insufficienti possono portare a tempi di elaborazione più lenti e a prestazioni inferiori.
- Configurazione del server web. La configurazione del server web e la sua interazione con PHP possono influenzare le prestazioni dei thread.
- Velocità del database. Le applicazioni PHP spesso recuperano i dati dai database MySQL per generare contenuti dinamici. La velocità di recupero dei dati dipende da fattori quali l’organizzazione del database, l’ottimizzazione delle query e le prestazioni del server del database. Questi elementi influiscono direttamente sulle prestazioni complessive delle applicazioni PHP.
- Versione di PHP. Le versioni più recenti di PHP possono spesso migliorare le prestazioni dei thread PHP grazie a miglioramenti delle prestazioni, correzioni di bug e aggiornamenti di sicurezza.
Noi di Kinsta teniamo molto alle prestazioni dei vostri siti. Ecco perché abbiamo implementato diverse tecnologie volte a massimizzare le prestazioni di PHP e a ridurre al minimo le richieste di PHP:
- Offriamo il caching delle pagine sia a livello di CDN che di server, con regole personalizzabili per garantire la massima efficienza della cache.
- Utilizziamo server premium su GCP (macchine virtuali C2 e C3D) dotati delle CPU più veloci di Google Cloud per aiutare i thread PHP del vostro sito a funzionare in modo più efficiente.
- La nostra infrastruttura scalabile garantisce che i thread PHP del vostro sito WordPress dispongano di risorse CPU sufficienti per operare al massimo delle prestazioni.
- Utilizziamo un’infrastruttura di rete premium di Google Cloud Platform (GCP) per ridurre al minimo la latenza. Sfruttando la rete premium di GCP, riduciamo significativamente il tempo necessario ai dati per viaggiare tra i diversi componenti della nostra infrastruttura, compresi il server MySQL e i server web.
- Forniamo un server MySQL altamente ottimizzato ospitato localmente per ridurre la latenza di rete e migliorare la velocità di recupero ed elaborazione dei dati.
- Sul server MySQL abbiamo buffer InnoDB che aiutano a migliorare le prestazioni del database riducendo le operazioni di I/O su disco. I dati possono essere consultati più rapidamente dalla memoria piuttosto che dal disco, migliorando l’efficienza delle operazioni di lettura e scrittura e ottenendo migliori prestazioni complessive per il database MySQL.
- Ci assicuriamo che sia sempre disponibile l’ultima versione di PHP per incorporare qualsiasi miglioramento delle prestazioni.
Visualizzare le prestazioni di PHP
È possibile visualizzare le prestazioni PHP andando su Siti WordPress > nome del sito > Info.
Questo mostra le seguenti informazioni:
- Memoria PHP totale. La memoria PHP totale distribuita tra i thread PHP.
- Thread PHP. Precedentemente conosciuti come PHP worker. Si tratta del numero di thread PHP per sito. Ogni thread è un processo PHP che gestisce una richiesta in entrata alla volta, quindi un numero maggiore di thread consente di avere più richieste simultanee. I contenuti in cache evitano i thread PHP, che sono necessari solo per le query al database o per le modifiche ai dati.
- Memoria per thread. È il limite di memoria PHP per thread, ovvero la quantità massima di memoria (RAM) che ogni thread PHP può utilizzare durante l’elaborazione di una richiesta.
- Limite di thread raggiunto. Mostra il numero di errori “PHP thread limit reached” in un dato ambiente nelle ultime 24 ore. Quando si verifica questo errore, significa che il sito non è stato servito e che i visitatori del vostro sito vedranno solo l’errore 500. Le cause principali di questo errore sono:
- Picchi di traffico elevati. Se il vostro sito web subisce un improvviso picco di traffico, ad esempio durante una promozione o un evento, tutti i thread PHP disponibili possono essere bloccati, dando luogo a questo errore.
- Codice poco ottimizzato. Gli script PHP lenti o pesanti dal punto di vista delle risorse possono richiedere più tempo per essere eseguiti, facendo sì che i thread rimangano occupati per periodi più lunghi. Se gli script PHP comportano query al database complesse o inefficienti, possono bloccare il processo di esecuzione.
- Plugin o temi inefficienti. Alcuni plugin o temi possono consumare eccessive risorse del server, causando ritardi nell’elaborazione dei thread. Anche se i singoli plugin non sono pesanti dal punto di vista delle risorse, la presenza di un numero eccessivo di essi può rallentare l’elaborazione del PHP in modo cumulativo.
- Attività in background. Processi in background o cron job di lunga durata (come i backup programmati o la pulizia del database) possono consumare le risorse dei thread PHP, contribuendo al raggiungimento del limite.
- Attacco DDoS o bot. Un attacco DDoS (Distributed Denial of Service) o una grande quantità di traffico bot possono sovraccaricare il server e consumare tutti i thread PHP disponibili, causando questo errore.
- Limite di memoria raggiunto: Questa metrica mostra il numero di “PHP Fatal error: Allowed memory size of xxx bytes exhausted” (La dimensione di memoria consentita di xxx byte è esaurita) in questo ambiente nelle ultime 24 ore. Quando si verifica questo errore, significa che il sito non è stato servito e che i visitatori del vostro sito vedono solo l’errore 500. Le cause principali di questo errore sono:
- Elaborazione di dati di grandi dimensioni. Gli script che elaborano grandi insiemi di dati, immagini o file (ad es. importazione di CSV, manipolazione di immagini) possono consumare molta memoria, causando questo errore.
- Perdite di memoria nel codice. La gestione impropria di variabili, oggetti o array di grandi dimensioni che non vengono rilasciati dopo l’uso può causare una perdita di memoria, con conseguente elevato consumo di memoria.
- Codice o algoritmi inefficienti. La memorizzazione di enormi array o oggetti in memoria, soprattutto senza ottimizzare il modo in cui vengono gestiti, può esaurire la memoria. Gli script che aprono file, connessioni di rete o altre risorse esterne senza chiuderle correttamente possono aumentare gradualmente l’utilizzo della memoria.
- Plugin o temi mal progettati. Alcuni plugin o temi possono consumare una quantità eccessiva di memoria a causa di un codice inefficiente o di una scarsa ottimizzazione. Anche se ogni plugin singolarmente non utilizza molta memoria, avere molti plugin installati e attivi può collettivamente superare i limiti di memoria.
- Attività in background. I cron job, le attività programmate o gli script in background che vengono eseguiti per lunghi periodi o che gestiscono grandi quantità di dati possono causare questo errore, soprattutto se non sono ottimizzati.
Modificare le prestazioni PHP
È possibile modificare le prestazioni PHP per ogni sito dalla pagina Siti WordPress > nome del sito > Info > Prestazioni PHP > Modifica.
Questo mostra il pool di memoria totale nel piano corrente. Il pool di memoria è la memoria totale di PHP distribuita tra i thread PHP. Ad esempio, se avete 4 thread PHP e un pool di memoria totale di 2GB, il limite di memoria PHP per ogni thread PHP sarà di 512MB.
Potete modificare il pool di memoria totale per aumentare la quantità totale di memoria distribuita tra i thread PHP. Potete anche utilizzare il cursore per aggiungere:
- Più thread. Potete spostare il cursore verso questa posizione per aumentare il numero di thread PHP del vostro sito. Aumentando il numero di thread, la memoria di PHP viene automaticamente distribuita sul numero maggiore di thread; ciò può comportare una minore quantità di memoria per thread. Ad esempio, se si hanno 16 thread con un pool di memoria totale di 2 GB, il limite di memoria PHP per ogni thread è di 128 MB. Se si aumentano i thread a 32, mantenendo invariato il pool di memoria, il limite di memoria PHP per ogni thread sarà di 64 MB.
Un numero maggiore di thread consente al vostro sito di gestire più richieste in entrata contemporaneamente. Tuttavia, con meno memoria per thread, le attività ad alta intensità di memoria come le query di database o i caricamenti di file multimediali potrebbero superare la memoria disponibile, causando errori. Questo aspetto è importante da considerare quando si configura il sito.
I siti dinamici che generano contenuti in tempo reale, come le piattaforme di e-commerce, i siti web basati su CMS o i forum, hanno maggiori probabilità di beneficiare di un maggior numero di thread. I siti statici che visualizzano contenuti fissi, come i blog, la documentazione o i siti web in stile brochure, in genere non traggono vantaggio da un numero maggiore di thread PHP, poiché il loro contenuto cambia raramente e richiede un’elaborazione minima del server.
Potete ridurre l’utilizzo dei thread abilitando la cache e ottimizzando il codice. Per maggiori dettagli sulla riduzione dell’uso dei thread, consultate Ridurre e ottimizzare l’uso dei thread in PHP. - Più memoria. Potete spostare il cursore verso questa opzione per aumentare il limite di memoria PHP per thread; tuttavia, se non aumentate il pool di memoria PHP, il numero di thread PHP disponibili sarà ridotto. Il limite massimo di memoria per thread è di 1024 MB. Ad esempio, se avete 16 thread con un pool di memoria totale di 2 GB, il limite di memoria PHP per ogni thread è di 128MB. Se aumentate il limite di memoria ma mantenete invariato il pool di memoria, i thread PHP si riducono a 2 e il limite di memoria PHP per thread sarà di 1024MB.
L’allocazione di una maggiore quantità di memoria per thread consente al vostro sito di gestire in modo più efficace le attività che richiedono molta memoria, come il caricamento dei contenuti. I siti con numerosi plugin o che fanno molte richieste al database possono trarre vantaggio da una maggiore memoria per thread per mantenere prestazioni ottimali. Tuttavia, se hai meno thread, questo riduce il numero di richieste in entrata che il vostro sito può gestire contemporaneamente.
Quando modificate i valori, l’immagine sotto il cursore mostra i valori aggiornati e la loro distribuzione tra i thread e la memoria.
Una volta soddisfatti dell’allocazione dei thread e della memoria, cliccate su Continua. Se avete aumentato il pool di memoria, vedrete un add-on per le prestazioni PHP; i dettagli sui costi sono riportati nella schermata successiva. L’abbonamento apparirà nel prossimo ciclo di fatturazione e sarà il costo sarà calcolato automaticamente pro-rata per il periodo di fatturazione in corso.
Nota: poiché questo add-on è pro-rata, è possibile aumentare temporaneamente il pool di memoria totale, i thread o la memoria se prevedete un traffico elevato per eventi come il Black Friday o il Cyber Monday. Dopo l’evento, potrete tornare alle impostazioni originali e vi verranno addebitati solo i giorni in cui il componente aggiuntivo era attivo.
Se riducete le dimensioni del pool di memoria per rimuovere il componente aggiuntivo per le prestazioni PHP e siete nei primi 30 giorni del vostro piano di hosting WordPress, il costo dell’add-on sarà aggiunto alla vostra prossima fattura per il periodo in cui era attivo. Se il vostro piano di hosting WordPress è attivo da più di 30 giorni, riceverete un credito proporzionale per le tariffe dell’add-on sul saldo del vostro account per i giorni rimanenti del periodo di fatturazione corrente. Il credito viene automaticamente utilizzato per compensare il denaro dovuto a Kinsta nella fattura successiva. Per maggiori informazioni, consultate la nostra Garanzia di rimborso per l’hosting WordPress.
Ambienti di staging
È possibile modificare il pool di memoria totale solo nell’ambiente live. Se lo modificate nell’ambiente live, il nuovo valore si applica a tutti gli ambienti di staging standard e premium.
Modificando il pool di memoria o il numero di thread nell’ambiente live, l’allocazione della memoria per thread nell’ambiente di staging standard si adatta di conseguenza; tuttavia, il numero massimo di thread per un ambiente di staging standard è limitato a 2. Ad esempio, se l’ambiente live ha un pool di memoria di 2GB con 4 thread PHP, ogni thread avrà un limite di memoria di 512MB. Nell’ambiente di staging standard, si tratterebbe di 2 thread PHP, ciascuno con un limite di memoria di 512MB.
Negli ambienti di staging premium, avete la possibilità di regolare il numero di thread e la memoria indipendentemente dall’ambiente live.
Valori di distribuzione del pool, dei thread e della memoria
La tabella seguente mostra le opzioni di distribuzione della memoria e dei thread in base al valore del pool di memoria totale:
Pool di memoria 512MB
Thread PHP | Memoria per thread |
---|---|
2 | 256MB |
4 | 128MB |
8 | 64MB |
Pool di memoria 1GB
Thread PHP | Memoria per thread |
---|---|
2 | 512MB |
4 | 256MB |
8 | 128MB |
16 | 64MB |
Pool di memoria 1,5GB
Thread PHP | Memoria per thread |
---|---|
3 | 512MB |
6 | 256MB |
12 | 128MB |
24 | 64MB |
Pool di memoria 2GB
Thread PHP | Memoria per thread |
---|---|
2 | 1024MB |
4 | 512MB |
8 | 256MB |
16 | 128MB |
32 | 64MB |
Pool di memoria 2,5GB
Thread PHP | Memoria per thread |
---|---|
2 | 1024MB |
5 | 512MB |
10 | 256MB |
20 | 128MB |
Pool di memoria 3GB
Thread PHP | Memoria per thread |
---|---|
3 | 1024MB |
6 | 512MB |
12 | 256MB |
24 | 128MB |
Pool di memoria 4GB
Thread PHP | Memoria per thread |
---|---|
2 | 2048MB |
4 | 1024MB |
8 | 512MB |
16 | 256MB |
32 | 128MB |
Se avete bisogno di più thread PHP o di un limite di memoria più alto per thread, vi consigliamo di utilizzare un server dedicato.
Rimuovere l’add-on per le prestazioni PHP
Per rimuovere l’add-on per le prestazioni PHP da tutti i siti, andate su nome utente > Impostazioni azienda > Il mio piano e cliccate su Rimuovi Prestazioni PHP.
In questo modo tutti i siti tornano alla memoria e ai thread PHP originali inclusi nel vostro piano. La finestra di conferma mostra da quali siti verrà rimosso il componente aggiuntivo e a quali livelli verrà ripristinato il pool di memoria. Per confermare la rimozione, cliccate su Rimuovi l’add-on per le prestazioni PHP.
Per rimuovere il componente aggiuntivo per le prestazioni PHP per un singolo sito, potete modificare le prestazioni PHP e ridurre il pool di memoria totale al valore predefinito incluso nel vostro piano. Potete anche rimuovere il componente aggiuntivo per tutti i siti che lo hanno abilitato andando su nome utente > Impostazioni Azienda e nella sezione Prestazioni PHP, cliccate su Rimuovi.
La finestra di conferma mostra in quali siti verrà rimosso il componente aggiuntivo e quali saranno i valori del pool di memoria PHP, del conteggio dei thread e della memoria per thread. Per confermare la rimozione, cliccate su Rimuovi l’add-on per le prestazioni PHP.
Se siete nei primi 30 giorni del vostro piano di hosting WordPress, il costo pro-rata del componente aggiuntivo sarà aggiunto alla vostra prossima fattura per il periodo in cui è stato attivato. Se il vostro piano di hosting WordPress è attivo da più di 30 giorni, riceverete un credito pro-rata per i costi dell’add-on sul saldo del vostro account per i giorni rimanenti del periodo di fatturazione corrente. Il credito viene automaticamente utilizzato per compensare il denaro dovuto a Kinsta nella fattura successiva. Per maggiori informazioni, consultate la nostra Garanzia di rimborso per l’hosting WordPress.
Add-on Limite di memoria PHP
Questo add-on aumenta il limite di memoria da 256MB a 512MB al costo di 50 dollari per sito al mese. Per visualizzare l’add-on all’interno di MyKinsta, andate su Siti WordPress > nome sito > Add-on > Memoria PHP.
Se rimuovete il componente aggiuntivo per il limite di memoria PHP e siete nei primi 30 giorni del vostro piano di hosting WordPress, il costo pro-rata del componente aggiuntivo sarà aggiunto alla vostra prossima fattura per il periodo in cui è stato attivato. Se il vostro piano di hosting WordPress è attivo da più di 30 giorni, riceverete un credito pro-rata per i costi del componente aggiuntivo sul saldo del vostro account per i giorni rimanenti del periodo di fatturazione attuale. Il credito viene automaticamente utilizzato per compensare il denaro dovuto a Kinsta nella fattura successiva. Per maggiori informazioni, consultate la nostra Garanzia di rimborso per l’hosting WordPress.
Identificare i problemi di prestazioni PHP
Lo strumento APM di Kinsta
L’utilizzo di strumenti come lo strumento APM di Kinsta e il plugin Query Monitor può aiutarvi a identificare i problemi di prestazioni e le query lente. Vi consigliamo anche di collaborare con un esperto di prestazioni qualificato per diagnosticare i problemi.
Limite di thread PHP
Potete accedere al grafico del limite di thread PHP in MyKinsta > Siti WordPress > nome del sito > Statistiche > Prestazioni > Limite thread PHP.
Se un thread PHP non ha task da completare per 10 secondi continuativi, il processo di thread PHP terminerà automaticamente. Non appena sarà necessario, il processo di thread verrà ricreato all’istante. Questo grafico mostra quante volte è stato raggiunto il numero massimo di thread allocati sul vostro sito.
Ad esempio, se avete un piano WP 5, questo consente un massimo di 4 processi thread PHP. Se sono in uso 3 thread PHP e viene effettuata un’altra richiesta al vostro sito che richiede un thread PHP, quando il thread PHP viene creato, si raggiunge il numero massimo di 4 thread PHP e viene registrato come un incidente in cui viene raggiunto il limite di thread PHP.
Questo potrebbe darvi solo un quadro parziale dell’attività dei thread PHP, poiché registra solo il numero di volte in cui viene raggiunto il limite di thread PHP e non il tempo in cui tutti i thread PHP sono stati utilizzati.
Ad esempio, se il vostro sito subisce un’impennata di traffico, tutti i thread PHP potrebbero rimanere costantemente occupati per un’ora intera senza tempi morti e, quindi, non terminare affatto durante quell’ora. In questo caso, il limite di thread PHP verrebbe raggiunto solo in un caso e quindi potrebbe sembrare che i thread PHP non siano stati occupati durante quell’ora, mentre in realtà sono stati tutti attivi per tutto il tempo. Dopo 30 minuti, se il traffico diminuisce e un thread PHP rimane inattivo per 10 secondi, viene interrotto automaticamente. Tuttavia, se il thread PHP viene richiesto di nuovo in un altro minuto, il numero massimo di thread PHP verrà nuovamente raggiunto e verrà registrato un altro limite di thread PHP.
Se volete aumentare il numero di thread PHP per il vostro sito, potete farlo da Siti WordPress > nome del sito > Info > Prestazioni PHP > Modifica.
Se state studiando le prestazioni del sito e volete determinare se il vostro sito sta consumando continuamente i suoi thread PHP, potete monitorare l’attività dei thread PHP utilizzando degli strumenti in una sessione SSH. Ad esempio, il seguente comando personalizzato monitora il numero di thread PHP attivi ogni 0,3 secondi:
watch -n 0.3 "ps aux | awk '$(NF-2) ~ /php-fpm/ && $(NF-1) ~ /pool/ && $8 ~ /R/ { print $0 }' | wc -l"
Per uscire da questo comando, premete CMD + C o CTRL + C e rilasciate entrambi i tasti.
Limite di memoria PHP raggiunto
Potete accedere al grafico relativo al limite di memoria PHP raggiunto in MyKinsta > Siti WordPress > nome del sito > Statistiche > Prestazioni > Limite di memoria PHP raggiunto.
Questo grafico mostra il numero di volte in cui il Limite di memoria PHP è stato raggiunto. Il limite di memoria PHP predefinito di Kinsta è di 256 MB, che è più che sufficiente per la maggior parte dei plugin e dei siti WordPress. Questo limite esiste per evitare che gli script PHP consumino troppa memoria. Se si imposta un limite troppo alto, uno script mal configurato o non funzionante può causare seri problemi consumando troppa memoria.
Questo fornisce solo una visione parziale dell’utilizzo della memoria PHP, poiché registra il numero di volte in cui il limite di memoria viene raggiunto, ma non la durata di tali eventi.
Se il vostro sito è impostato correttamente su Kinsta, non dovreste raggiungere il limite di memoria PHP. In caso contrario, vi consigliamo di ridurre e ottimizzare l’utilizzo dei thread PHP.
È possibile modificare il limite di memoria PHP di un sito all’interno dei siti WordPress > nome del sito > Info > Prestazioni PHP > Modifica.
Analisi della cache
La sezione di analisi della cache di MyKinsta può essere utilizzata per visualizzare il totale delle richieste in cache del vostro sito e i principali bypass della cache.
Ridurre e ottimizzare l’uso dei thread PHP
Cache
La cache è la vostra migliore amica quando si tratta di ottimizzare il vostro sito e ridurre il numero di thread PHP necessari. Ricordate che i thread PHP non sono necessari per i contenuti in cache, quindi mettete in cache tutto ciò che potete.
Caching delle pagine
Su Kinsta ci occupiamo noi della cache delle pagine; tutti i siti utilizzano il modulo di cache FastCGI di Nginx per ottenere prestazioni super veloci.
Edge caching
L’Edge caching memorizza la cache del vostro sito o della vostra pagina Kinsta (normalmente salvata solo nel centro dati del vostro sito) nella rete globale di oltre 260 data center di Cloudflare. Quando i visitatori accedono al vostro sito, i contenuti in cache vengono serviti dalla posizione più vicina, aumentando in modo significativo le prestazioni e la velocità del sito web fino al 40%.
Cache degli oggetti
L’aggiunta di una cache persistente di oggetti come Redis davanti al vostro database può aumentare le prestazioni e ridurre la necessità di thread PHP. Senza la cache degli oggetti, le query del database MySQL vengono eseguite per ogni richiesta, anche quando si tratta della stessa query e degli stessi risultati.
Redis memorizza i risultati delle query del database nella RAM, in modo che il PHP possa prenderli senza dover eseguire nuovamente la query. Eliminando la necessità di eseguire query ripetitive al database, i thread PHP possono risparmiare risorse e soddisfare le richieste in modo più efficiente.
Potete aggiungere la cache di Redis al vostro sito con il nostro add-on Redis caching.
Ottimizzazione del codice
Assicuratevi che il codice del vostro sito sia ottimizzato in modo da essere il più efficiente possibile. Questo vale per il codice personalizzato, il codice del tema e il codice dei plugin. Se non sapete bene come fare, vi consigliamo di chiedere a uno sviluppatore di rivedere il codice del vostro sito.
Codice personalizzato
Se il vostro sito web contiene frammenti di codice personalizzato nei plugin o nel tema, assicuratevi che siano davvero necessari e ben scritti.
I plugin
Date un’occhiata ai plugin utilizzati nel sito e assicuratevi che siano veramente necessari, che non duplichino le funzioni e che siano l’opzione migliore per le esigenze che soddisfano. Se qualche plugin non è compatibile con l’ultima versione di WordPress e PHP, potrebbe essere il momento di considerare altre opzioni. Se sul vostro sito ci sono dei plugin che non vengono utilizzati, è consigliabile rimuoverli.
Tema
Usate un tema leggero e performante. Evitate i temi che contengono funzionalità che è meglio implementare tramite plugin separati (ad es. SEO, filtri di ricerca, campi personalizzati, slider/slideshow di immagini, ecc.
Aggiornare PHP
Usate l’ultima versione di PHP per ottenere prestazioni più veloci. I benchmark PHP mostrano che ogni versione PHP è più veloce della precedente.
Abilitare il CDN di Kinsta
L’attivazione del CDN di Kinsta offre un’ulteriore spinta all’efficienza e all’ottimizzazione del vostro sito. Il CDN di Kinsta è il nostro CDN HTTP/3 ad alte prestazioni alimentato da Cloudflare, che viene fornito senza costi aggiuntivi. Grazie a questa funzione, il vostro sito può servire risorse statiche da tutto il mondo.
Consultare un esperto di performance
Se avete familiarità con l’ottimizzazione del sito, questo è un passo facoltativo. Un esperto può aiutarvi ad analizzare tutti gli aspetti del vostro sito, identificare i colli di bottiglia e implementare eventuali soluzioni.