155 30/03/2026 07/04/2026 7 min

OPcache: cosa fa e perché conviene in produzione

OPcache è il motore che conserva in memoria i file PHP già compilati, evitando di ricostruirli a ogni richiesta. In pratica riduce lavoro al processore, abbassa il tempo di risposta e rende più stabile il carico quando il traffico cresce. Su un sito WordPress, un CMS o una piattaforma custom, il guadagno si vede soprattutto su TTFB, CPU e numero di richieste gestibili senza rallentamenti.

Il punto non è “attivarlo e basta”, ma impostarlo in modo coerente con il tipo di applicazione, la RAM disponibile e il livello di cambiamento del codice. Un settaggio troppo aggressivo può creare cache inutilmente piccole o invalidazioni frequenti; uno troppo rilassato può consumare memoria senza beneficio reale. L’obiettivo pratico è avere una cache che resti calda, con pochi reset e un uso ordinato della memoria.

Settaggi pratici consigliati

Per ambienti produttivi comuni, il punto di partenza più sicuro è questo: OPcache attivo, memoria sufficiente, validazione file attiva e frequenza di controllo ragionevole. I valori esatti dipendono dal progetto, ma queste impostazioni sono una base solida da cui partire.

Valori di partenza consigliati

  • opcache.enable=1: deve essere attivo per tutti gli utenti PHP in produzione.
  • opcache.enable_cli=0: di norma meglio lasciare disattivato per evitare effetti indesiderati nei comandi CLI.
  • opcache.memory_consumption=128 o 256: 128 MB per siti piccoli o medi, 256 MB se hai molte classi, plugin o codice custom.
  • opcache.interned_strings_buffer=16: in molti casi è un buon compromesso.
  • opcache.max_accelerated_files=10000 o 20000: utile per evitare saturazione della cache su installazioni grandi.
  • opcache.validate_timestamps=1: consigliato in produzione se fai deploy frequenti.
  • opcache.revalidate_freq=60: controlla i file ogni 60 secondi; è un buon equilibrio tra freschezza e prestazioni.
  • opcache.save_comments=1: da mantenere attivo se usi framework o CMS che leggono annotazioni/commenti.

Se il sito è molto stabile e il deploy avviene in modo controllato, puoi valutare opcache.validate_timestamps=0, ma solo se hai un processo chiaro per svuotare la cache dopo ogni rilascio. È più veloce, ma richiede disciplina operativa.

Impostazioni spesso utili ma da valutare con attenzione

  • opcache.jit: su PHP 8 può essere interessante in casi specifici, ma per molti siti web classici non porta benefici evidenti e può complicare il tuning.
  • opcache.max_wasted_percentage=5: aiuta a controllare la frammentazione, ma non sostituisce una buona dimensione della cache.
  • opcache.file_update_protection=2: protegge da file appena scritti, utile in ambienti con deploy automatici.

Dove configurarlo

Il percorso cambia in base al pannello o alla distribuzione. Su server Linux con PHP-FPM, spesso il file è in uno di questi percorsi:

/etc/php/8.x/fpm/php.ini
/etc/php/8.x/cli/php.ini
/etc/php.d/10-opcache.ini

Su cPanel, Plesk o FastPanel conviene usare il gestore PHP del pannello, quando disponibile, perché riduce il rischio di modificare il file sbagliato. Su ambienti multi-versione è fondamentale verificare che il PHP del sito e quello che stai toccando siano la stessa cosa.

Prima di cambiare valori manualmente, salva sempre una copia del file. È il rollback più semplice e più veloce.

Configurazione consigliata di base

Una configurazione equilibrata per molte installazioni produttive può essere questa:

opcache.enable=1
opcache.enable_cli=0
opcache.memory_consumption=128
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.validate_timestamps=1
opcache.revalidate_freq=60
opcache.save_comments=1
opcache.fast_shutdown=1

Su installazioni più grandi, ad esempio WordPress multisite, e-commerce con molti plugin o applicazioni Laravel/Symfony, puoi aumentare la memoria a 256 MB e i file accelerati a 20000. Non farlo a caso: prima guarda l’uso reale della cache e poi decidi.

Come scegliere i valori giusti

La regola pratica è semplice: dimensiona la cache in base al numero di script e alla loro complessità, non solo in base alla RAM totale del server. Una VPS con 4 GB di RAM non significa che OPcache debba usare il massimo possibile; significa che devi bilanciare cache PHP, database, web server e sistema operativo.

Se vedi frequenti riempimenti della cache o molte ricompilazioni, aumenta memory_consumption e max_accelerated_files. Se invece la cache resta quasi vuota, probabilmente hai sovradimensionato e puoi ridurre i valori. L’obiettivo è stare in una zona di utilizzo stabile, non al limite.

Per un hosting condiviso o una VPS piccola, spesso basta 64-128 MB. Per applicazioni più pesanti, 128-256 MB è più realistico. Oltre questi valori ha senso solo se i numeri dell’osservabilità lo giustificano.

Verifica pratica dopo l’attivazione

Dopo aver abilitato o modificato OPcache, verifica sempre che sia davvero in uso. Il controllo più semplice è creare un file PHP con phpinfo() o usare la pagina di stato di OPcache, se già predisposta.

Controlla questi aspetti:

  • OPcache risulta enabled.
  • La memoria usata non è vicina al limite in modo costante.
  • Il numero di file cached cresce in modo coerente con il sito.
  • Le invalidazioni non sono eccessive.
  • Non compaiono errori nei log PHP o del web server.

Se hai accesso a SSH, puoi anche verificare la versione PHP attiva e il caricamento del modulo. Su sistemi Debian/Ubuntu e derivati, il controllo utile è spesso questo:

php -v

Nel risultato devi vedere la presenza di OPcache tra i moduli caricati. Se non compare, stai modificando il PHP sbagliato oppure il modulo non è installato per quella specifica versione.

Monitoraggio: cosa guardare davvero

Quando OPcache è impostato bene, i segnali positivi sono concreti: CPU più bassa, TTFB più stabile, minor tempo speso in compilazione PHP e meno picchi sotto carico. Non fermarti al “sembra più veloce”: misura.

Le metriche più utili sono:

  • CPU: deve scendere o diventare più stabile a parità di traffico.
  • RAM: OPcache usa memoria fissa, quindi controlla che non sottragga troppo a database e web server.
  • TTFB: se cala in modo visibile, la cache sta lavorando bene.
  • Cache hit: più è alto, meglio è; se è basso, qualcosa invalida troppo spesso.
  • Slow query: OPcache non risolve i problemi MySQL, ma può ridurre la pressione generale e rendere più leggibili gli altri colli di bottiglia.

Se il server ha già cache applicative o reverse proxy, OPcache è solo uno strato della catena. Non sostituisce Redis, page cache o una query ottimizzata, ma li completa bene.

Errori comuni da evitare

Il primo errore è disattivare i controlli sui timestamp senza un flusso di deploy affidabile. Se poi carichi file nuovi e la cache non viene svuotata, il sito può mostrare codice vecchio o comportamenti incoerenti.

Il secondo errore è usare una cache troppo piccola. In quel caso il server continua a ricompilare file e il vantaggio reale si riduce molto. Il terzo errore è confondere il tuning di OPcache con il tuning di PHP-FPM: se i processi FPM sono pochi o saturi, la cache non risolve il problema da sola.

Altro errore frequente: cambiare i parametri e non riavviare il servizio giusto. A seconda dell’ambiente, può servire il riavvio di PHP-FPM, Apache o entrambi. Se usi il pannello hosting, verifica che il reload sia avvenuto davvero.

Procedura sicura di applicazione

  1. Fai un backup del file di configurazione PHP o del file OPcache dedicato, così puoi tornare indietro in pochi secondi.
  2. Applica prima i valori base: memoria, file accelerati, timestamps e revalidate_freq.
  3. Riavvia solo il servizio necessario, non tutto il server, se non è richiesto.
  4. Verifica con una pagina PHP di test o con phpinfo che OPcache sia attivo.
  5. Controlla i log per 10-15 minuti dopo il cambio, soprattutto se il sito è in produzione.

Se noti rallentamenti improvvisi o errori anomali, torna immediatamente al backup precedente e ripristina la configurazione stabile. Una modifica conservativa è sempre preferibile a un guadagno teorico che mette a rischio il sito.

Rollback semplice e pulito

Il rollback migliore è il più banale: ripristino del file originale, riavvio del servizio PHP e nuova verifica. Tieni sempre una copia della configurazione precedente con data e ora, così sai esattamente cosa hai cambiato.

Se hai agito dal pannello, annota i valori originali prima di salvare. Se hai agito da terminale, conserva il file di backup nello stesso percorso o in una cartella dedicata ai salvataggi. In caso di emergenza, il tempo di recupero conta più di qualsiasi ottimizzazione marginale.

Conclusione operativa

OPcache è uno dei miglioramenti più semplici e più efficaci per PHP in produzione, ma rende davvero solo se configurato con criterio. La combinazione più affidabile, nella maggior parte dei casi, è: cache attiva, memoria adeguata, verifica timestamp attiva e monitoraggio dopo il deploy.

Se devi partire oggi, imposta una base prudente, misura l’effetto e aumenta i valori solo quando i numeri lo giustificano. È il modo più pulito per ottenere più velocità senza introdurre instabilità.

Regola pratica: prima stabilità, poi velocità. OPcache funziona meglio quando riduce il lavoro inutile, non quando maschera una configurazione sbilanciata.