PHP OPcache inschakelen: stappen, instellingen en controle

Ondernemer bekijkt OPcache in het hostingpaneel

Schakel OPcache in door opcache.enable=1 te zetten, of installeer het juiste opcache-pakket, en herstart daarna je PHP-runtime. PHP bewaart dan gecompileerde bytecode in gedeeld geheugen en hoeft scripts niet bij elk verzoek opnieuw te compileren. Dat scheelt rekentijd per pagina. Laat opcache.enable_cli gewoon op 0 staan, tenzij je CLI-scripts bewust wilt cachen.


Kort samengevat:

  • Controleer eerst je PHP-versie en bepaal of Apache of de FPM-dienst PHP uitvoert; maak kopieën van configuratiebestanden voordat je wijzigingen aanbrengt.
  • Bij gedeelde hosting staat OPcache vaak al aan; controleer je instellingenpaneel en vraag je hostingprovider om activering als je geen toegang op serverniveau hebt.
  • Laat de controle van tijdstempels aan voor automatische vernieuwing; schakel die alleen uit bij onveranderlijke releases en leeg daarna de cache of herstart de FPM-dienst.
  • Controleer met opcache_get_status() het geheugengebruik, aantal gecachte scripts en trefferpercentage; verhoog geheugen of scriptlimieten pas als metingen aantonen dat de cache volloopt.

NLXS
Houd je PHP-hosting soepel
NLXS biedt veilige webhosting en ICT-oplossingen op maat, zodat je technische problemen kunt aanpakken en je op je bedrijf kunt richten.

Bekijk hosting en ICT

Inhoudsopgave

Wat heb je nodig voordat je OPcache inschakelt?

Voordat je iets wijzigt, zorg je dat je omgeving klaarstaat. Een foutje in een ini-bestand legt in het slechtste geval al je sites plat, dus een korte voorbereiding loont.

  • Je hebt root- of sudo-rechten, of toegang tot php.ini en de poolconfiguratie van je PHP-runtime.
  • Je weet welke PHP-versie draait (php -v), zodat je de juiste pakketnaam kiest, bijvoorbeeld php8.4-opcache op Debian en Ubuntu.
  • Je hebt een kopie van php.ini en van de pool- of conf.d-bestanden die je gaat aanpassen.
  • Je weet of je met Apache en mod_php werkt of met php-fpm achter NGINX, want de herstartcommando’s verschillen.

Op Debian stable is voor PHP 8.4 het pakket php8.4-opcache beschikbaar, zoals de PHP-documentatie over OPcache aangeeft. Draai je een andere PHP-versie, pas dan het versienummer in de pakketnaam aan.

Hoe schakel je OPcache in op Apache, php-fpm en hosting?

De stappen hangen af van je setup. Hieronder het pad voor Debian en Ubuntu, daarna de varianten.

  1. Installeer het pakket: sudo apt install php8.4-opcache. Volgens het installatielog van het Debian-pakket ontstaat daarbij /etc/php/8.4/mods-available/opcache.ini en wordt de module geregistreerd.
  2. Open dat bestand, of je php.ini, en zet opcache.enable=1 en opcache.enable_cli=0.
  3. Herstart de runtime. Bij Apache met mod_php: sudo systemctl restart apache2. Bij php-fpm: sudo systemctl restart php8.4-fpm.
  4. Controleer na de herstart of de waarden kloppen (zie het kopje over verifiëren).

Bij php-fpm achter NGINX kun je de instellingen ook in /etc/php/<versie>/fpm/conf.d/opcache.ini zetten, of per pool met php_admin_value[opcache.enable]. Let op: opcache.enable is een systeeminstelling. Volgens Php kun je die niet betrouwbaar met ini_set() in applicatiecode aanzetten. Configureer dus altijd het ini-bestand of de pool.

Op shared hosting en cPanel-omgevingen staat OPcache bij veel hosts al aan. Kijk in de PHP-instellingen van je controlepaneel of draai phpinfo(). Staat OPcache uit en heb je geen toegang tot het serverniveau, vraag dan je host om het te activeren.

Pro-tip: Wijzig één ding tegelijk en controleer na elke herstart met php -m | grep -i opcache, zodat je meteen ziet welke stap iets verandert.

Welke OPcache-instellingen zijn een goed vertrekpunt?

Begin met de waarden uit de documentatie en verhoog ze pas als je metingen hebt. De configuratietabel van PHP noemt als standaard onder meer opcache.memory_consumption=128, opcache.interned_strings_buffer=8 en opcache.max_accelerated_files=10000.

  • opcache.memory_consumption=128: het geheugen in megabytes voor gecachte bytecode.
  • opcache.interned_strings_buffer=8: ruimte voor gedeelde strings, ook in megabytes.
  • opcache.max_accelerated_files=10000: het maximale aantal gecachte scripts.
  • opcache.max_wasted_percentage=5: stel deze documentatiewaarde alleen in als die bij je configuratie past.
  • opcache.validate_timestamps=1 met opcache.revalidate_freq=2: PHP controleert elke twee seconden of een bestand is gewijzigd.

Dit zijn documentatiewaarden, geen universele optimale waarden: workload, PHP-versie, aantal bestanden en workergeheugen bepalen wat bij jouw server past. Een kleine site met relatief weinig bestanden kan genoeg hebben aan de standaard, terwijl een grotere site met veel scripts eerder tegen de grens van max_accelerated_files kan aanlopen. Meet daarom eerst de bezetting en pas daarna aan, in plaats van blind te verdubbelen.

Zet validate_timestamps alleen op 0 als je met immutable releases werkt en je deployment de cache expliciet leegt. Daar komen we verderop op terug.

NLXS, Lage Mosten 51, 4822 NK Breda
NLXS
Bespreek je PHP-hosting
Bij NLXS kun je terecht voor webhosting en infrastructuuroplossingen die zijn afgestemd op de behoeften van jouw organisatie.
NLXS
Lage Mosten 51, 4822 NK Breda

Bekijk de route

Hoe controleer je of OPcache actief is?

Roep phpinfo() aan en zoek de sectie Zend OPcache: staat daar “Opcode Caching: Up and Running”, dan werkt het. Voor details gebruik je twee functies uit PHP zelf.

  • opcache_get_status() geeft de actuele status, inclusief geheugengebruik en hitstatistieken.
  • opcache_get_configuration() toont de werkelijke directivewaarden en kan false teruggeven bij restricties.
  • Op de command line geldt opcache.enable_cli apart: een script dat je met php script.php draait, gebruikt OPcache alleen als die instelling op 1 staat.

Dit zijn de waarden die je uit opcache_get_status() het meest nodig hebt:

VeldWat het zegt
opcache_enabledof OPcache actief is
memory_usagegebruikt, vrij en verspild geheugen
num_cached_scriptsaantal gecachte scripts
opcache_hit_rateaandeel verzoeken dat uit de cache komt

Een hoge hit rate en een gevulde maar niet overvolle cache betekenen dat je instellingen kloppen volgens een gedetailleerde technische checklist en best practices voor developers. Zie je verspild geheugen oplopen of de cache vol raken, dan is dat het moment om de waarden bij te stellen.

Wat moet je weten over deployments en timestamp-validatie?

De deployment controleert de bestandstijd en vernieuwt de cache

Het gedrag bij codewijzigingen bepaalt of je veilig kunt tunen. Met validate_timestamps=1 ziet PHP nieuwe bestanden vanzelf, binnen de tijd van revalidate_freq. Die frequentie werkt in seconden en telt alleen mee als timestamp-validatie aanstaat. Met revalidate_freq=0 controleert PHP bij elk verzoek, wat in ontwikkelomgevingen gebruikelijk is.

In productie kun je validatie uitzetten voor extra snelheid, maar volgens de PHP-documentatie mag dat alleen als je deployment daarna expliciet de cache reset, invalideert of de workers herstart. Anders blijven oude versies van je code gewoon draaien.

  1. Zet de nieuwe release klaar op een aparte plek, zonder bestaande bestanden te overschrijven.
  2. Schakel over naar de nieuwe release (bijvoorbeeld via een symlink).
  3. Roep opcache_reset() aan of herstart php-fpm, zodat de cache vers vult.
  4. Gebruik opcache_invalidate($bestand, true) als je gericht één bestand wilt verversen.
  5. Test op een staging-omgeving, want gedrag rond preloading en timestamps kon in oudere PHP-versies afwijken.

Pro-tip: Roep opcache_reset() aan vanuit een verzoek via de webserver, niet vanaf de command line: de CLI heeft een eigen geheugenruimte en wist de cache van php-fpm niet.

Wat doe je als OPcache niet werkt zoals verwacht?

De meeste problemen vallen in een paar vaste categorieën.

  • OPcache staat uit: controleer opcache.enable en kijk met php -v of php -m of de module is geladen. Vergeet de herstart na je wijziging niet.
  • Scripts worden niet ververst: kijk of validate_timestamps op 0 staat en of je deployment de cache wel leegt. Preloading en timestampgedrag kunnen ook meespelen.
  • Cache vol of veel herstarts: verhoog memory_consumption of max_accelerated_files pas nadat je met opcache_get_status() hebt gemeten waar de grens ligt.
  • Rechtenproblemen: AppArmor of bestandsrechten kunnen de toegang tot OPcache-bestanden blokkeren, zeker bij een file cache buiten de standaardpaden.

Wanneer is beheerde hosting slimmer dan zelf configureren?

Zelf OPcache instellen is prima als je één server beheert en tijd hebt voor monitoring. Zodra er meerdere sites draaien of deploys vaak plaatsvinden, wordt het foutgevoelig: een vergeten reset na een release en klanten zien oude code. Wij zien in de praktijk dat veilige defaults, monitoring en een snelle herstart bij een deploy het verschil maken tussen een rustige en een hectische release. Houd je liever de controle zelf, dan is dat een prima keuze. Heb je liever dat iemand meekijkt, dan laat je de configuratie en bewaking aan een specialist.

— Ken

Laat ons OPcache voor je instellen en bewaken

Wij bieden WordPress webhosting en serverbeheer. Verwijder deze zin. Wil je weten wat dat voor jouw omgeving betekent, neem dan contact met ons op.

NLXS

Veelgestelde vragen

Moet ik PHP herstarten na het inschakelen van OPcache?

Ja, een wijziging in php.ini of een pool-bestand wordt pas actief na een herstart van Apache of php-fpm. Bij mod_php herstart je apache2, bij php-fpm de bijbehorende service.

Staat OPcache standaard aan in PHP?

De PHP-documentatie noemt opcache.enable=1 als standaardwaarde, terwijl opcache.enable_cli standaard op 0 staat. Of de module op jouw server beschikbaar is, hangt af van hoe PHP is geïnstalleerd, dus controleer het altijd met phpinfo().

Waarom zie ik mijn codewijzigingen niet na een deploy?

Waarschijnlijk staat opcache.validate_timestamps op 0 en wordt de cache niet geleegd. Roep opcache_reset() aan of herstart php-fpm als onderdeel van je deployment.

Hoeveel geheugen moet ik OPcache geven?

Begin met de documentatiestandaard van 128 megabyte voor opcache.memory_consumption en meet daarna met opcache_get_status(). Verhoog alleen als het geheugen structureel vol raakt.

NLXS
Overleg over OPcache en hosting
Neem contact op over je hostingvraag en bespreek hoe NLXS je kan ontzorgen bij technische problemen.

Aanbevelingen

Benieuwd wat NLXS voor jou kan betekenen?