Cosa contribuisce al tempo di esecuzione della pagina drupal?


17

Ho un sito che sto esaminando che presenta importanti problemi di prestazioni, usando memcache sono stato in grado di ridurre il numero di query sia in numero che in termini di tempo di esecuzione totale (da 3 secondi a 230 ms) ma il tempo di esecuzione della pagina mi sta sfuggendo (lo sono guardando i valori emessi dallo sviluppo) la mia comprensione è che il tempo di esecuzione della pagina = tempo impiegato per l'esecuzione di php, quindi ho installato APC e posso vedere il codice operativo php essere memorizzato nella cache e le statistiche mostrano gli hit nel pannello di controllo APC (apc.php fornito con APC) ma il tempo di esecuzione della mia pagina non diminuisce. Quindi penso che la mia domanda sia duplice:

  • Che cosa contribuisce a (rallenta meglio) i tempi di esecuzione della pagina? Ci vuole solo tempo per eseguire php?
  • Quali approcci dovrei adottare per ridurre i tempi di esecuzione della pagina. Ho provato APC ma non molto aiuto

Il numero di moduli PS utilizzati in questo sito è semplicemente enorme (168) ma in questo momento non sono in grado di formulare questa raccomandazione, è più simile a un incendio nella situazione del buco.

Modifica: output di esecuzione di xhprof su istanza locale (consigliato da mikeytown), questo sembra essere pazzo Penso che i risultati successivi siano dovuti al thrashing? diff funziona per lo stesso url ha una differenza drastica e il suo utilizzo eccessivo delle risorse. Inoltre, non so perché sta mostrando valori che non provengono da oggi: | (Ho appena installato xhprof su questo laptop)

Output dell'esecuzione di xhprof sull'istanza locale

Risposte:


4

Ottieni un cachegrind del tuo sito. xdebug o xhprof possono generarne uno. Questo ti dirà quali funzioni impiegano più tempo per essere eseguite. Fino a quando non lo fai, è un brutto gioco d'ipotesi.


Ehi, grazie per il suggerimento che ho appena eseguito xhprof sulla mia versione di sviluppo locale (laptop non sul server) e vedo questo - picasaweb.google.com/lh/photo/… È vero? Voglio dire, è anche possibile che una pagina consumi 750Mb di memoria?
Dipen,

Potrebbe essere coz di thrashing? i dati profilati successivi per lo stesso url, se si osserva lo stesso url in basso, si impiegano molte meno risorse ma una corsa diff mostra un utilizzo completamente diff ed estremo delle risorse.
Dipen,

1
Dipende davvero, ma per il 99,9% delle configurazioni se usi più di 100 MB di RAM qualcosa non va.
mikeytown2,

Oltre al numero di moduli, potrebbe esserci qualcos'altro che non va? Non sono sicuro che i moduli possano essere rimossi immediatamente dalla produzione. A proposito, su locale sto usando nginx + php-fpm e su produzione il sito sta usando lighspeed con veloce cgi.
Dipen,

1
È necessario eseguire il drill-down nel cachegrind ed elencare quale funzione viene utilizzata continuamente. img715.imageshack.us/i/cgrindout.png
mikeytown2

1

EDIT: ho letto male il post originale. 168 moduli sono molti e da 300 a 700ms di query SQL sono enormi . Più moduli utilizzerai, più query arriveranno non appena i moduli ne eseguiranno alcuni.

Usa la cache aggressiva mentre puoi, memorizza nella cache tutto, se non è abbastanza, prova una cache proxy inversa. L'uso di una CDN per i file può migliorare notevolmente il tutto. Una cache proxy inversa può anche aiutarti rimuovendo alcuni cookie di autenticazione quando colpisce le pagine che non ne hanno bisogno (quindi il core penserà che l'utente sia anonimo per quelli e massimizzerà la memorizzazione nella cache).


Il dinamismo del core di Drupal rallenta l'intera alba non appena hai troppi moduli che interagiscono contemporaneamente.

Direi, ad esempio, se usi molti moduli che caricano i dati al momento di hook_node_load () invece di usare i campi, farà molte domande mentre l'uso del campo avrebbe garantito l'efficienza della cache.

Anche il rendering può richiedere molto tempo, drupal_render () (l'API di rendering a volte chiamata) è un bel pezzo di API (davvero utile) ma anche un po 'lento. Il passaggio a PDO (D7) e al DBTNG completo (il che è fantastico a proposito) aggiunge anche una latenza non trascurabile.

Detto questo, il core di per sé è abbastanza veloce (ma fa troppe query SQL, anche con quasi nulla installato), i moduli scarsamente codificati spesso rappresentano il collo di bottiglia.

APC può dividere il tempo di esecuzione per 2 o 3, a seconda del codice che viene eseguito. se lo configuri bene (abilita tutte le ottimizzazioni APC, il manuale ufficiale APC è ben scritto e ti guiderà).

Se ci si trova in una scatola con un file system lento (file system di rete o disco rigido lento), ciò può implicare un impatto visibile sui tempi di esecuzione. Drupal è composto da molti piccoli file, che costringono PHP a eseguire operazioni di I / O su FS ogni volta che ne carica uno (APC aiuta anche molto per quello).

Un DBMS configurato in modo errato può anche essere un brutto collo di bottiglia, se stai usando MySQL pensa a fare una messa a punto. Se sei su un hosting condiviso, se non è lo stack DBMS e PHP specifico di Drupal (o pronto), probabilmente sarà configurato in modo errato o non ottimizzato, il che può portare a siti molto lenti.

Non dimenticare di attivare tutte le cache. Se il tuo sito non è autenticato orientato all'utente, attiva la cache aggressiva della pagina (è davvero incredibile).

Più avrai blocchi, più le pagine complete saranno lente, i blocchi di moduli di Views saranno un collo di bottiglia all'alba (a seconda dei plug-in di Views che usi, il blocco di OG può essere una vera seccatura) se non ne limiti la visibilità su base per pagina o con codice PHP personalizzato (anche qualsiasi altro blocco, imposta sempre manualmente la visibilità del blocco, aiuta notevolmente il framework evitando che tenti di rendere blocchi vuoti).

Evita i moduli che usano hook_init (), hook_init () viene eseguito su ogni pagina, anche se ottieni un 403 o un 404, che rallenta tutto (rallenta persino il tempo di generazione dello stile di imagecache |, e 404 errori sui file sarebbero alba lenta solo per dirti che il file non esiste).


Ciao, qui quando dico tempo di esecuzione della pagina intendo il valore che viene mostrato dal modulo di sviluppo nella parte inferiore della pagina e non lo uso nel senso generale del ciclo di richiesta / risposta drupal che include anche query SQL ecc. La mia domanda è nel contesto dell'utente autenticato. Quindi quando lo sviluppo riporta il tempo di esecuzione della pagina include anche le query sql?
Dipen,

Non sono sicuro se il filesystem sarebbe un collo di bottiglia come lo sono sul filesystem linux 15k RPM. Le query SQL richiedono circa 300-700 ms in base alla pagina, ma il tempo di esecuzione della pagina ~ = 3 sec (riportato dallo sviluppo). Non sono sicuro di cos'altro potrebbe essere il problema.
Dipen,

Oh scusa, ho letto male il tuo post originale. Il valore di sviluppo viene calcolato da avvio a arresto (il modulo di sviluppo ha il proprio gestore di arresto PHP per fare molte cose, incluso questo). Non sono sicuro esattamente quando si avvia e si arresta, ma praticamente tutto il tempo di costruzione della pagina Drupal e le specifiche aziendali sono inclusi in quel tempo di esecuzione della pagina. Sì, include tutto (incluso il tempo e la latenza delle query SQL) e la propria latenza (anche lo sviluppo della registrazione delle query ha un impatto sulle prestazioni).
Pierre,
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.