Skip to main content

PHP: Guida all’installazione di WinCache su IIS

Il principale collo di bottiglia della maggior parte dei software basati su PHP è quasi sempre legato all’utilizzo della memoria da parte dell’interprete dei comandi. Nel caso di siti poco frequentati questo può essere un problema trascurabile, ma quando un blog in WordPress o un sito commerciale in Joomla comincia a diventare popolare i nodi cominciano a venire al pettine: pagine che caricano sempre più lentamente, request che si accavallano e un senso generalizzato di lentezza che verrà puntualmente confermato da strumenti di monitor come Yslow (se ancora non lo utilizzate, correte a installarlo!), Analytics etc.

Per migliorare le sorti di un sito in PHP molto trafficato che gira sotto IIS è possibile installare una delle estensioni gratuite di cache attualmente a disposizione: in questo articolo parleremo del sistema di cache proprietario messo a punto dalla Microsoft e chiamato WinCache, installabile gratuitamente e incluso nel pacchetto base delle versioni di PHP per Windows dalla 5.2 in poi. Questa estensione garantisce un notevole incremento prestazionale grazie a una cache a 5 livelli:

  • OPCode Cache: Caching degli script compilati a livello di bytecode, per evitare che il sistema processi più volte lo stesso identico script.
  • File Cache: Caching dei file php veri e propri, risparmiando al sistema numerosi accessi al disco per leggere più volte gli stessi identici file.
  • Resolve File Path Cache: Caching dei path assoluti degli script, in molti casi costruiti grazie a funzioni di risoluzione ripetute decine di volte nel corso del codice. Il sistema memorizza il mapping tra path relativi e assoluti evitando così di eseguire le operazioni di risoluzione.
  • User Cache: Caching degli oggetti e variabili create a livello di singolo utente, per evitare di dover ricreare le stesse cose di processo in processo.
  • Session Cache: Un vero e proprio session manager che consente di memorizzare le informazioni di sessione dell’utente evitando le frequenti operazioni sul file-system tipicamente richieste dal sistema di sessioni normalmente utilizzato da PHP (la classica cartella /sessiondata/), velocizzando inoltre il recupero dei dati di sessione.

Installare WinCache è estremamente semplice. Per prima cosa occorre assicurarsi che il file dll relativo all’estensione sia incluso nell’installazione PHP presente sul nostro sistema. In altre parole, il file php_wincache.dll dev’essere presente nella sottocartella /ext/ contenuta nella directory di installazione di PHP. Nel caso in cui non ci fosse è possibile scaricare una versione aggiornata della libreria dal sito ufficiale di WinCache (assicurandovi di selezionare il file compatibile con la vostra versione di PHP) e copiarla manualmente nella cartella suddetta.

Una volta fatto questo occorre abilitare l’estensione aggiungendo le seguenti due righe al proprio file php.ini, normalmente presente nella directory di installazione di PHP oppure nella cartella di installazione di Windows.

IMPORTANTE: Prima di aggiungere queste righe è consigliabile accertarsi che l’estensione non sia già abilitata effettuando una rapida ricerca di “php_wincache.dll” all’interno del file.

Se utilizzate PHP Manager per IIS (cosa altamente consigliabile) potete anche installare l’estensione anche attraverso la GUI fornita da questo ottimo programma.

Se non utilizzate PHP Manager e/o non avete idea di dove si trovi il vostro php.ini potete rintracciarlo eseguendo il comando phpinfo() sul vostro server (se non sapete cosa significa cliccate qui per ottenere uno script da caricare ed eseguire) e, una volta fatto, dare un’occhiata al parametro Loaded Configuration File:

Loaded Configuration File

Il comando phpinfo() può essere utilizzato anche per verificare che l’estensione WinCache sia stato installata correttamente. In caso affermativo troverete infatti una sezione fatta più o meno in questo modo:

Wincache configuration in PHPInfoCon tutta probabilità, come nell’immagine di cui sopra, il sistema vi informerà che le cache sono disabilitate. La cosa è del tutto normale: l’estensione è presente ed è stata correttamente installata, ma non è ancora attiva.

Per attivarla è necessario aggiungere al file php.ini una serie di parametri di configurazione nel seguente modo:

I parametri sopra elencati sono grosso modo adeguati per un server di produzione: per esigenze specifiche si consiglia di consultare la documentazione di riferimento di WinCache, che contiene una spiegazione dettagliata di ciascun parametro e le indicazioni di base su come impostare l’estensione nel modo adeguato.

Se si desidera abilitare anche la Session Cache e utilizzare WinCache come session handler è inoltre necessario modificare il seguente parametro, sempre nel php.ini:

Al termine della configurazione, e dopo un necessario riavvio di IIS, sarà possibile verificare il risultato dei propri sforzi eseguendo nuovamente il comando phpinfo():

PHPINFO: wincache enabled

 

VMware 10 e Windows Update KB2995388: Not enough physical memory available

Gli utenti che utilizzano la versione 10 di VMware Player o Workstation sotto Windows e tengono aggiornato il proprio sistema incontreranno molto probabilmente un problema di questo tipo:

Error_msg

L’errore è dovuto a una incompatibilità tra la versione di VMWare in oggetto e l’aggiornamento KB2995388 rilasciato da Microsoft tra ottobre e novembre 2014. Il problema è stato subito segnalato dal team di sviluppo di VMware, che annuncia la prossima pubblicazione di un fix per risolvere il problema. Nel frattempo, l’unica soluzione percorribile è quella di disinstallare l’aggiornamento dal proprio sistema (Pannello di Controllo -> Programmi e Funzionalità -> Visualizza Aggiornamenti Installati):

Control_panel_2

Per ulteriori informazioni sull’errore “Not enough physical memory” si consiglia di fare riferimento all’articolo pubblicato sul blog di sviluppo di VMware.

 

Close