website-velocità

Velocizzare un sito web con XHProf

Indice dei contenuti

Guida all’uso di XHProf. Installazione, configurazione e utilizzo per velocizzare un sito web.

 
Velocizzare un sito web con XHProf XHProf è un’estensione dell’interprete PHP che permette di analizzare l’esecuzione di una pagina web, collezionando dati relativi all’utilizzo di CPU, memoria e tempo di esecuzione. Questo profiler consente inoltre di generare un diagramma visuale, semplificando le operazioni di debugging e permettendo di identificare in maniera semplice quali sono le parti del codice che rallentano la visualizzazione del sito.
 
Installazione

Per integrare la libreria xhprof.so in PHP è necessario operare con i privilegi di amministratore, utilizzando una connessione SSH.

Nel nostro caso, utilizzeremo un sistema Debian GNU/Linux con PHP in modalità FastCGI ed apache2, quindi il packet manager APT e l’installer PECL.

Tutti i software necessari all’utilizzo del profiler possono essere installati con questo comando:

apt-get install php5-common php5-dev make graphviz php-pear

Mentre per scaricare e compilare automaticamente xhprof basterà eseguire queste istruzioni:

pecl config-set preferred_state beta

pecl install xhprof

Configurazione

Inizialmente occorre creare la directory in cui memorizzare i file generati da xhprof, impostando su di essa il corretto proprietario, ovvero l’utente relativo al sito da analizzare:

mkdir /tmp/xhprof/

chown utente_sito /tmp/xhprof/

Abilitiamo quindi l’estensione in PHP, creando il file /etc/php5/conf.d/xhprof.ini e memorizzando al suo interno le seguenti direttive:

[xhprof]
extension=xhprof.so
xhprof.output_dir="/tmp/xhprof"

Per poter consultare il grafico generato in formato HTML e direttamente da un browser web, basterà creare questo alias nella configurazione di apache2 e più precisamente nel file /etc/apache2/conf.d/xhprof.conf

alias /xhprof_html "/usr/share/php/xhprof_html/"

Riavviando il web server ed eseguendo il comando

php -m

sarà possibile verificare che il modulo viene caricato dal PHP

xhprof1

Non rimane che creare questi due file nella document root del sito

autoprepend.php:

<?php

if (extension_loaded('xhprof')) {

include_once '/usr/share/php/xhprof_lib/utils/xhprof_lib.php';
include_once '/usr/share/php/xhprof_lib/utils/xhprof_runs.php';

xhprof_enable(XHPROF_FLAGS_NO_BUILTINS | XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY);

}

 

autoappend.php:

<?php

if (extension_loaded('xhprof')) {
       $profiler_namespace = "turner";
       $xhprof_data = xhprof_disable();
       $xhprof_runs = new XHProfRuns_Default();
       $run_id = $xhprof_runs->save_run($xhprof_data, $profiler_namespace);
       $profiler_url =
sprintf('http://xhprof.seeweb.it/xhprof_html/index.php?run=%s&source=%s',
$run_id, $profiler_namespace);
       printf('<br><br>&nbsp;&nbsp;&nbsp;<a href="%s"
target="_blank">Profiler output</a><br>', $profiler_url);
} else {
       echo "<!-- profiler not enabled -->";
}


N.B. E' necessario modificare il nome del sito nella funzione "sprintf", inserendo quello del vostro dominio

ed utilizzare le direttive “auto_prepend” e “auto_append” del PHP per abilitare l’analisi di tutte le pagine php del sito.

Quest’ultima operazione può essere eseguita editando manualmente la configurazione del PHP:

auto_prepend_file = /var/www/vhosts/xhprof.seeweb.it/autoprepend.php
auto_append_file = /var/www/vhosts/xhprof.seeweb.it/autoappend.php

oppure utilizzando gli strumenti presenti nel pannello amministrativo Plesk che mettiamo a disposizione con il prodotto Cloud Server.

xhprof2

N.B. In base alla configurazione del PHP, potrebbe essere necessario disabilitare la direttiva open_basedir, impostando il suo valore a “none”

Utilizzo

Accedendo al sito con un browser web, avremo modo di verificare la presenza di un nuovo link in fondo alla pagina:

xhprof3

Quel collegamento ci consentirà di visualizzare i dati campionati da XHProf.

Le informazioni mostrano che il sito, su cui è installato il CMS WordPress, viene processato in 306ms e che utilizza 18Mb di memoria

xhprof4

Simuliamo ora un rallentamento dovuto ad un plugin poco ottimizzato, oppure che abbia errori logici.

Tali problemi, generalmente si evidenziano solo dopo che le entry nel vostro database abbiano raggiunto un numero elevato, oppure quando il sito inizia ad avere un traffico cospicuo.

La causa di ciò, solitamente è dovuta a query MySQL di tipo join su tabelle non indicizzate, query che necessitano della creazione di tabelle temporanee su disco, all’utilizzo di risorse esterne (come informazioni derivate dai social media), oppure ad operazioni eseguite ogni qualvolta un utente accede al sito (utilizzando plugin di polling, estensioni che elaborano dati sui visitatori, ecc.)

Nel nostro caso, per simulare un rallentamento, aggiungeremo la funzione “sleep()” nel codice di un plugin.

Ricaricando il sito ed accedendo ai dati di XHProf, noteremo immediatamente che il tempo di esecuzione della pagina è aumentato, rendendo necessaria un’attesa di oltre 5 secondi affinchè il sito venga visualizzato.

Analizzando le informazioni presenti nella tabella, avremo modo di identificare il plugin responsabile e la funzione che deve essere revisionata

xhprof5

Cliccando sul link “View Full Callgraph” infine, mostreremo graficamente e sotto forma di un diagramma, il flusso di esecuzione della pagina web

xhprof6

CONDIVIDI SUI SOCIAL

Una risposta

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

9 + 1 =