Senza opcache, PHP legge e compila ogni file a ogni richiesta: lo stesso lavoro, migliaia di volte al minuto, per file che non sono cambiati. opcache tiene in memoria la forma compilata. Di solito è il più grande miglioramento singolo disponibile, ed è una sola impostazione.

opcache.enable=1
opcache.memory_consumption=192
opcache.max_accelerated_files=20000
opcache.validate_timestamps=1
opcache.revalidate_freq=2

Controlli che sia davvero acceso

php -i | grep -E 'opcache.enable|opcache.memory'
# or, in a page you can reach:
print_r(opcache_get_status()['opcache_statistics']);
  • opcache_hit_rate sotto il 95% - memory_consumption è troppo piccolo e sta buttando fuori file che gli serviranno di nuovo.
  • num_cached_keys vicino a max_accelerated_files - alzi il limite dei file; un framework grande ha più file di quanti il valore predefinito ne consenta.

Che cosa NON fa

Mette in cache il codice compilato, non i risultati. Una query lenta è esattamente altrettanto lenta con opcache acceso. Se la sua pagina è lenta per quello che chiede al database, questo non cambia nulla - ed è la delusione più comune.

L'impostazione che nasconde un deploy

opcache.validate_timestamps=0 è più veloce e vuol dire che PHP non controlla mai se un file è cambiato. Il suo deploy parte e il sito continua a servire il codice vecchio, senza un errore da nessuna parte. Se lo imposta, il suo deploy DEVE svuotare la cache.
# after deploying, with validate_timestamps=0
cachetool opcache:reset
# or reload the pool
systemctl reload php8.3-fpm
Sull'hosting EGPHP opcache è acceso e tarato sul pool. Questa pagina è per un VPS che gestisce lei.