Qual è il modo ideale per profilare l'utilizzo della memoria di WordPress?


8

Stiamo eseguendo un'istanza multisito di WordPress su due server Rackspace Cloud, un web e un database, con circa 30 siti attualmente. Ho messo Nginx in primo piano per le risorse statiche e Apache gestisce tutte le richieste dinamiche. Ho anche configurato Memcached per il database e la cache del codice operativo APC per PHP. W3 Total Cache è abilitato per impostazione predefinita su tutti i siti che abbiamo.

È velocissimo con un problema: i processi Apache pesano regolarmente tra 80 e 120 MB. Il web server ha 2 GB di memoria, il che significa che ottengo circa 15 processi fino a quando le cose non vanno in crisi. I processi ovviamente non dovrebbero essere così grandi ma sono perplesso sul perché lo siano.

Qual è una buona strategia per identificare cosa sta succedendo?

Grazie in anticipo!

Aggiornamento 10/10/10: Per coloro che si chiedono, la risoluzione del problema di memoria è stata la disabilitazione di xdebug PHP (è stato inavvertitamente abilitato sulla configurazione e ha causato picchi di utilizzo della memoria casuali).

Risposte:


4

La quantità di memoria di processo di apache di cui parli (da 80 a 120 MB per processo) può essere suddivisa in due motivi.

  1. Apache
  2. Wordpress

Apache

Puoi ottimizzare apache caricando solo il numero di moduli necessari e altre modifiche di ottimizzazione che ridurranno la memoria. Se non l'hai ancora ottimizzato, dagli alcune modifiche.

Wordpress

Wordpress consuma molta memoria e non è affatto ottimizzato. Vorrei iniziare con la sostituzione della classe del database con qualcosa di più correttamente implementato. Ciò dovrebbe guadagnare più velocità e ridurre molto l'utilizzo della memoria. Accanto a ciò non ho molto da suggerire. Non usare Worpdress non è considerato utile suppongo.

strategie

Per scoprire cosa sta succedendo, devi tenere traccia di quanta memoria occupa una richiesta di wordpress. È disponibile una funzione di picco utilizzo ( memory_get_peak_usage()) che è possibile utilizzare per monitorare l'utilizzo della memoria di worpdress. Se si avvicina agli 80-120 MB di cui hai scritto, sai che wordpress ti sta creando il mal di testa. È possibile che si desideri registrare data / ora, memoria di picco, tempo di esecuzione e URI richiesto.

L'utilizzo di Nginx per pubblicare pagine di wordpress memorizzate nella cache ti aiuterà sicuramente perché impedirà il caricamento di wordpress, anche per quelle cache "in entrata" come quella che usi. Sono concettualmente interrotti perché sono un plugin per wordpress, quindi almeno una parte di wordpress deve essere caricata anche per i risultati memorizzati nella cache.


1

Daniel,

Non sono d'accordo con kenkeiter, capisco di usare nginx come proxy inverso davanti ad Apache. La legge di Harvard ha avuto un grande successo con questo metodo e hanno un ottimo articolo su come farlo, con un link al loro plugin WordPress che aiuta a interfacciarsi con nginx:

http://blogs.law.harvard.edu/djcp/2010/01/nginx-as-a-front-end-proxy-cache-for-wordpress/

Ciò che hanno scoperto alla Harvard Law è che, con nginx che praticamente memorizza nella cache tutte le richieste nel front-end, non migliora effettivamente le prestazioni per utilizzare qualsiasi altro plug-in di tipo cache nel back-end e non vale la complessità aggiuntiva. Se stai seriamente pensando all'utilizzo di nginx in questo modo, ti consiglio di dare un'occhiata a quell'articolo sulla loro esperienza e provare a ridurre i processi dinamici, inclusa la cache sul lato WP.

Alcuni sleuth di base come guardare attentamente l'accesso ad Apache e i log degli errori per vedere quali tipi di query devono essere effettivamente fatti dinamicamente e cercare di ridurre tali casi può anche essere un buon inizio.


0

Bene, prima di tutto, stai usando Apache e Nginx - un po 'ridondanti. Dovresti usare Nginx / FastCGI con PHP. Il tutorial su questo sito dovrebbe aiutare. Altrimenti, la mia ipotesi migliore è che alcune recenti modifiche al codice stiano causando alcuni bug in PHP per non rilasciare correttamente la memoria. Non c'è ragione per cui un processo Apache debba consumare tanta memoria.

http://interfacelab.com/nginx-php-fpm-apc-awesome/

In bocca al lupo!

@kenkeiter


Nginx / FastCGI sarebbe fantastico, ma è fuori dalla portata di risolvere questo problema
Daniel Bachhuber
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.