Dopo aver scritto oramai tempo fa l’articolo su come Ottimizzare WordPress e dopo aver letto un post che mi ha molto colpito e mi ha spinto a fare dei cambiamenti in alcuni miei siti realtivamente alla scelta del plugin di caching mi sono ritrovato con dei seri problemi di picchi di carico sui miei server e dunque ho letto come conseguenza interessanti post relativi a:
- casi reali di ottimizzazione (di Sergio Gandrus) usando alcuni dei plugin consigliati nel mio post,
- rapide mosse per ottimizzare i cms (di Michele Caivano),
- una leggermente datata ma ottima guida all’ottimizzazione di WordPress,
e altri dedicati ad un grave problema che affligge wordpress a partire dalla versione 2.8 come:
- WordPress is a Memory Hog,
- How to cut down wordpress memory usage,
- PHP on Fire: Five Opcode Caches compared,
- WordPress and Server RAM: Your (many) Plugin Uses (much) Memory
- Behold WordPress, Destroyer of CPUs (con risposta di Matt Mullenweg)
Dopo tutta questa lettura e dopo aver provata a passare da Wp Super Cache (http://wordpress.org/extend/plugins/wp-super-cache/) a Hyper Cache (http://wordpress.org/extend/plugins/hyper-cache/) + DB Cache Reloaded (http://wordpress.org/extend/plugins/db-cache-reloaded/) il risultato è stato davvero tremendo per il mio server.
Il load average è passato da picchi di 2.5 a picchi di 4.5 con un costante aumento medio del load.
A questo punto tramite qualche controllo ho identificato i domini più carichi e mi sono messo a testarli.
Se da un lato i due plugin hanno fatto guadagnare prezioni millisecondi nel caricamendo delle pagine hanno causato un globale slow down del server e dunque un rallentamento complessivo di tutti i domini.
Non rassegnato ho evitato di tornare a WP Super Cache e ho testato W3 Total Cache (http://wordpress.org/extend/plugins/w3-total-cache/) configurandolo in modo ottimale in ogni sua parte compreso caching del db e minify e testandolo sia con sistema di caching su disco che con XCache.
Il risultato utilizzando il disco è stato molto simile al risultato che ottenevo con Hyper Cache mentre invece risultato ottenuto con Xcache è stato davvero sorprendente e a prova di bomba. Il load risulta regolare e la velocità di caricamento è davvero impressionante e visibile a occhio umano senza usare troppi strumenti.
Nel mio caso ho impostato anche la configurazione di mysql consignata da Matt e ho impostato Xcache nel seguente modo:
{code php}
xcache.size = 32M
xcache.count = 1
xcache.slots = 8K
xcache.ttl = 3600
xcache.gc_interval = 300
xcache.var_size = 1M
xcache.var_count = 1
xcache.var_slots = 8K
xcache.var_ttl = 3600
xcache.var_maxttl = 0
xcache.var_gc_interval = 300
xcache.size = 32M
xcache.count = 1
xcache.slots = 8K
xcache.ttl = 3600
xcache.gc_interval = 300
xcache.var_size = 1M
xcache.var_count = 1
xcache.var_slots = 8K
xcache.var_ttl = 360
xcache.var_maxttl = 0
xcache.var_gc_interval = 300
{/code}
ma ognuno deve impostarlo in base alle proprie caratteristiche del server e testare la soluzione migliore in termini di carico/velocità.
Conclusioni
Per concludere va detto che di base WordPress consuma davvero parecchie risorse e che la scelta del plugin di caching va valutata singolarmente per ogni caso in quanto ci potrebbero essere incompatibilità tra plugin o con impostazioni della macchine su cui risiede il sito.
Per quanto riguarda W3 Total Cache devo dire che è davvero un ottimo plugin e se riuscisse ad inglobare la funzione di autoptimize diventerebbe davvero superlativo.
Per quanto riguarda XCache credo che sia un’ottimo strumento anche se esistono alternative come APC (che pare verrà incluso in PHP6) ed eAccelerator (che ho provato con un forum e funziona molto bene).
Che dire…è tutta questione di testing 🙂
Ottimo post che condivido pienamente. Anch’io ho trovato che l’accoppiata W3 Total Cache e XCache (o eAccelerator) funziona veramente bene.
Non mi sono mai trovato male nemmeno con WP Super Cache, mentre DB Cache Reloaded e soprattutto Hyper Cache mi hanno causato dei problemi. Quest’ultimo in alcuni casi mi ha schiantato il server per eccessivo consumo di CPU.
Ciao Tiziano e grazie mille…un onore averti tra i commenti 🙂
Grazie inoltre di aver aggiunto la tua esperienza a favore di questa tesi.
In questo modo andiamo ad avvalorare il fatto che è necessario provare e riprovare perché non esiste in assoluto una scelta assolutamente perfetta, ma che dipende molto anche dal tipo di macchina e di sito che si ha…e non ultimo andiamo anche a sfatare dei falsi miti che rischiano di crearsi in giro per la rete 😉
Credo che dopo il post linkato si siano schiantati molti server in giro per il mondo 🙂
Poi molto dipende dal volume e dal tipo di traffico del sito.
E’ molto diverso, ad esempio, avere un blog
con tutto il traffico focalizzato su due o tre pagine
piuttosto che averne uno nel quale il traffico è distribuito
in modo più equilibrato.
Un altro modo importante di migliorare le performance, secondo me,
è quello di usare i tag condizionali per evitare di caricare
tutti gli elementi su tutte le pagine del blog.
Decisamente come dici tu.
I conditional tag sono più laboriosi, ma importantissimi.
Ciao Andrea, grazie per questo articolo.
Io ho provato vari plugin, e ho dovuto escludere:
– DB cache reloaded per incompatibilità con simplepress
– WP Supercache per incompatibilità con member access
Ora, credevo di aver trovato una buona alternativa in hyper cache (anche vedendo i risultati di quell’ articolo di tutorial9.net
Tra l’ altro, lì dice di disabilitare la compressione, e allora mi chiedo perchè sia abilitata di default.
Vabbè.
Tu alla fine sei arrivato ad usare W3 Cache con Xcache…
Io non ho mai fatto tutti questi calcoli nella velocità di wordpress, ma ora che sto registrando dei picchi di traffico sul mio sitarello gli errori di database e il superamento della “Policy netsons” si sprecano.
E non pensavo (ora mi è venuto qualche dubbio) che si trattasse di hyper cache.
Oggi ho richiesto l’ upgrade a semidedicato pro (lo so, sono piccoletto) su Netsons.
Ci tengo a trovare una soluzione pressochè definitiva, perchè sennò perdo utenti interessati.
Adesso installo W3 cache, Xcache non so nemmeno se serve nel mio caso (e soprattuto nel configurarlo dovrei metterci un minimo d’ impegno)
Non utilizzando uno strumento di analisi della velocità, andrò per tentativi.
Ciao!
A fartelo installare non ci dovrebbe volere molto quindi puoi optare o per Xcache o per APC.
APC pare che dalla 6 diventerà di default in php6 quindi a te la scelta.
Avendo APC o XCache potrai poi decidere se scegliere l’opcode oppure il disco e potrai testare.
Allo stato attuale credo che W3 Total Cache sia l’unico plugin che permette di scegliere tra vari opcodde e caching su disco quindi…;)
Ciao,
grazie per la tua esperienza.
Io ho da poco installato sul mio blog wp super cache. Però dopo aver letto il tuo articolo, forse sono più tentato a provare ad installare
W3 Total Cache. Non credo ci siano problemi se elimina Super Cache e installo W3 Total Cache. Anche perché a dir la verità io tutta questa velocità con super cache non l’ho per niente notata. Cosa che non capisco è poi XCache. A cosa serve? E’ necessario?
Inoltre sarebbe interessante sapere come bisogna configurare W3 Total Cache.
Grazie mille
In ogni caso ho appena installato W3 Total Cache, e devo dire
che funziona davvero bene rispetto a wp super cache. Si nota
di più la differenza di caricamento.
Ad ogni modo però ho alcuni problemini:
il primo messaggio che mi viene segnalato è Unfortunately, PHP5 is required for full functionality of this plugin; incompatible features are automatically disabled. Please upgrade if possible.
Questo significa che dove è ospitato il mio sito non è attivo php5 vero?
Infatti la funzione Minify non è attiva.
A cosa serviva? è necessaria?
Infine non ho capito come si setta CDN.
basta cliccare sui bottoni upload includes files, upload theme files
e upload custom files?
Ultima cosa. come settare alla meglio il Database Chache Settings?
grazie mille
Infine non ho capito
Ciao Davide. Si vuol dire che non hai PHP5.
Per la CDN devi prima usarne una per abilitarla.
Eccezionale, una scheggia, poco più di un secondo e le pagine vengono create, mai visto nulla di così veloce, quasi istantaneo..attendo qualche giorno e voglio vedere sul WMT se è cambiato qualcosa
Bene Ste…sono felice 🙂
Facci sapere come reagisce WMT.
Ma voi fate spesso “ottimizza e ripara” sulle tabelle mysql?
Al di là delle iper configurazioni e plugin se una tabella si corrompe ne risente in prestazioni tutto il sistema… e dalla mia esperienza wordpress soffre di questo problema. Anche a voi capita?
Ho notato questa cosa nei momenti di molti commenti inseriti in brevi commenti…
Vedo però che ora usi APC come Opcode cache. Dove hai messo il file temporaneo di APC? viene scritto sul disco o nella shm? Lo chiedo perché di default APC usa il metodo mmap, quindi salva la cache sul disco fisico e non nella ram (shared memory). E per curiosità, quanti mega ti consuma?
Ciao Gale, ovviamente dipende tutto da come lo configuri.
Nel mio caso il consumo non è eccessivo e rimane sotto i 30 Mega.
Ciao Andrea,
nell’istallazione w3 Total Cache e XCache, riscontro un fastidioso problema. Nell’inserimento/aggiornamento di un post/pagina, mi ritrovo sempre su una pagina bianca.
Sai da cosa può essere dovuto? Ho bisogno di una configurazione particolare? Ho provato ad aggiungere nelle pagine escluse la pagina “post\.php” nessun risultato.
Grazie anticipate, per qualsiasi risposta.
Mmm non credo che sia un problema di W3 Total Cache, ma forse di qualche incompatibilità con qualche altro plugin.
Provando tra i vari settaggi, il problema sta in XCache.
Nello specifico nella Cache degli “Object Cache” con XCache.
Ho risolto impostando quest’ultima voce su “disk”.
Sembra tutto ok.
Ottimo Mauro…grazie per aver condiviso la soluzione.
Ciao a tutti,
ne approfitto per fare una domanda per cercare di risolvere i problemi su un mio sito.
Ho circa 20.000 unici giornalieri e 2 server dedicati:
WebServer:
Dual Intel Quadcore Xeon (8 CPU) – 8 x 2,0 Ghz
8GB Ram REG ECC
500GB in RAID 5
DB Server:
– AMD Opteron 144 (1 cpu)
– GB DDR
– 2 x 160 GB RAID 1
Il mio grosso problema è che non posso attivare la cache sugli oltre 11.000 articoli presenti in quanto faccio uscire pubblicità degli autori alternata con altra pubblicità (secondo parametri precisi).
Il sito nel primo pomeriggio (ormai quasi tutti i giorni) va down e devono riavviare il webserver.
Esiste una possibilità di cachare tutto l’articolo escluse le parti della pubblcità?
Avete qualche consiglio da darmi?
Grazie mille!
Sei sicuro che dipenda dalla mancanza di cache e non da qualche script o plugin fatto male ?
Comunque sia alla tua domanda rispondo dicendoti che quello che vuoi fare è possibile con W3 Total Cache specificando quale script non va cachato nel campo dove si possono escludere dalla cache alcuni file.
Grazie mille!
Beh…il fatto è che ogni articolo fa una serie molto elevata di richieste al server, indipendentemente dagli script/plugin.
In che modo W3 Total Cache permette l’esclusione dalla cache di alcuni script?
Significa che nel mio template posso specificare una parte di codice (che richiama il plugin) da non cachare?
Grazie ancora!
Mi sembra molto strano che con quelle visite riesci a buttar giù 2 server con 8 processori.
Comunque in W3 nella sezione “Never cache the following pages” e “Cache exception list”
puoi specificare cosa non mandare in cache.
Io attualmente sto usando wp-cache e nelle esclusioni dalla cache ho dovuto mettere i singoli post.
Da quello che mi dici invece con W3 posso escludere il singolo plugin o la singola parte di articolo?
Grazie!!!
Ciao Andrea,
Complimenti come sempre per l’articolo. Io recentemente sto avendo problemi con il mio sito che è stato sospeso dato delle query troppo grandi.
Faccio poco più di 400 visite al giorno quindi non me la sento di passare ad un server privato.
Cosa mi consigli per risolvere questo problema di query?
Utilizzo attualmente WP Super Cache.
Come posso muovermi per salvaguardare MySQL?
Grazie come sempre
Ciao Luigi, puoi provare ad usare w3 total cache che permette di fare caching anche delle query.
In alternativa controlla i plugin e il tema che usi il numero di query che fanno.
Con pochi semplici mosse potresti risolvere.
E poi conosci qualche plug-in che tiene pulito il database?
Wp CleanFix oppure Wp Optimize.
Grazie per le risposte rapidissime!!
Vorrei mettere da subito W3 Tatal Cache. Ma avrà grosse ripercussioni sulla CPU?
Ho trovato comunque il plug-in che mi ha incrementato troppo le query. E’ stato StatPress (Plug-in di statistiche in tempo reali sul sito)
Vorrei trovare una alternativa visto che questo bel plug-in non faceva scappare nulla come dati di visite ecc..
Ho anche svuotato a mano tutte le tabelle dei plug-in e statpress era arrivato alla bellezza di 180mb 🙂
Ciao andrea. Scusa la mia curiosità ma… io ho impostato il caching tramite impostazione moduli su file htaccess pensi che il risultato sia migliore usando i plugin citati ? ciao grazie
Ciao Fausto.
Cosa intendi con caching tramite impostazione moduli su file htaccess ?
ciao. Intendo impostare il caching inserendo le impostazioni al file htaccess ovvero il mod_headers.c – mod_expires.c – ecc ecc… ciao 🙂
Le direttive che indichi non servono per fare il caching delle pagine wordpress, ma a settare la scadenza delle risorse lato browser.
Sicuramente servono, ma non si tratta propriamente di caching wordpress.
Ciao Andrea, avrei una domanda per te: Hai provato anche a programmare gli articoli con W3 Total Cache attivo? Non ti da problemi nella pubblicazione di “Programmazione Mancante”? Hai idea di quale possa essere il problema?
Ciao Valerio.
Non non ho mai provato purtroppo.
Ciao,
interessante articolo. In effetti, l’uso di un Opcode Cache migliora le notevolmente le prestazioni di un sito. XCache, APC ed eAccellerator, sono tre ottimi software, la scelta va fatta soprattutto in base alla configurazione del proprio server.
Per Nginx + php-fpm, mi sento di consigliare APC.
Per Apache e Litespeed, XCache o eAccellerator.
In linea di massima, ho riscontrato maggiori miglioramenti con XCache, che è anche il più aggiornato, l’autore è lo stesso di lighttpd. Anche APC è buono, ma leggermente più lento.
eAccellerator è molto veloce e si integra bene con la maggior parte delle configurazioni; unico neo, non è più aggiornato dal 2010 e non ha una community molto attiva alle spalle.
W3 Total Cache offre inoltre, la possibilità di utilizzare di utilizzare APC, XCache o Memcached, come object cache, ma non dimentichiamoci che i primi due già di default ottimizzano ed accellerano PHP, quella è un’ulteriore funzione.
Per ambienti multi-server, penso Memcached sia la soluzione migliore.
Come suggeriva Andrea, il vero trucco sta sempre nel “testare”. Testare, testare e testare. Solo al termine di essi, è possibile trovare la migliore combinazioni e configurazione per i propri progetti.
Saluti!