@harrasteblogi JUURI NYT
--:--

Tilaa uutiskirje

Saat tuoreimmat 10 uusinta artikkelia kerran viikossa sähköpostiisi.

Tilaa uutiskirje

WordPress PHP OPcache optimointi tuotantoympäristössäPHP OPcache on yksi tehokkaimmista suorituskykyoptimoinneista WordPress-palvelimella. Vaikka monet keskittyvät välimuisteihin, CDN-ratkaisuihin ja tietokantaoptimointiin, OPcache voi yksinään vähentää PHP:n suorittamaa työtä merkittävästi. Jokainen WordPress-sivulataus koostuu sadoista PHP-tiedostoista, jotka ilman OPcachea jouduttaisiin lukemaan, jäsentämään ja kääntämään jokaisella requestilla uudelleen.

Tuotantoympäristössä oikein konfiguroitu OPcache voi pienentää CPU-kuormaa, nopeuttaa vasteaikoja ja kasvattaa PHP-FPM:n kapasiteettia huomattavasti.

Mikä OPcache on?

Normaalisti PHP suorittaa seuraavan prosessin:

PHP File
↓
Parse
↓
Compile
↓
Execute

Tämä tapahtuu jokaisella requestilla.

OPcache tallentaa käännetyn bytecoden muistiin:

PHP File
↓
Compile Once
↓
Store in Memory
↓
Execute

Näin parseria ja kääntäjää ei tarvitse ajaa jatkuvasti.

Miksi WordPress hyötyy OPcachesta?

WordPress lataa jokaisella requestilla:

  • WordPress coren
  • aktiiviset lisäosat
  • teeman
  • mahdolliset Composer-riippuvuudet

Yhdellä sivulatauksella voidaan käsitellä satoja PHP-tiedostoja.

Ilman OPcachea:

Request
↓
Compile Hundreds of Files
↓
Execute

OPcachen kanssa:

Request
↓
Load Bytecode From Memory
↓
Execute

Tarkista että OPcache on käytössä

Komentorivillä:

php -i | grep opcache

Tai:

phpinfo();

Etsi:

Zend OPcache

Perusasetukset tuotantoon

Tyypillinen konfiguraatio:

opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=32
opcache.max_accelerated_files=50000
opcache.validate_timestamps=1
opcache.revalidate_freq=60

Arvot riippuvat ympäristön koosta.

opcache.memory_consumption

Määrittää välimuistin koon megatavuina.

Esimerkiksi:

opcache.memory_consumption=256

Suuret WordPress-ympäristöt tarvitsevat usein:

512

tai enemmän.

opcache.max_accelerated_files

Määrittää kuinka monta PHP-tiedostoa voidaan välimuistittaa.

Tyypillinen WordPress-stack:

  • core
  • teema
  • useita lisäosia
  • Composer-kirjastoja

Suositus:

opcache.max_accelerated_files=50000

Interned strings buffer

WordPress käyttää paljon merkkijonoja.

Asetus:

opcache.interned_strings_buffer=32

vähentää muistinkulutusta.

Timestamp validation

Kehitysympäristö:

opcache.validate_timestamps=1

Tuotanto:

opcache.validate_timestamps=0

Tämä poistaa tiedostojen jatkuvan tarkistamisen.

Huomio:

Julkaisujen yhteydessä OPcache pitää tyhjentää manuaalisesti.

OPcache reset deployn yhteydessä

Esimerkki:

opcache_reset();

Tai palvelun uudelleenkäynnistys:

systemctl reload php8.3-fpm

Muistin käyttöasteen seuranta

Tarkista:

Used Memory
Free Memory
Wasted Memory

Jos muistia loppuu:

Cache Restarts

alkavat kasvaa.

Tämä heikentää suorituskykyä.

OPcache ja Composer

Composer-autoloading hyötyy merkittävästi OPcachesta.

Esimerkiksi:

vendor/

sisältää usein tuhansia tiedostoja.

Bytecode-välimuisti nopeuttaa niiden käyttöä huomattavasti.

OPcache ja WordPress-pluginit

Suuret pluginit:

  • WooCommerce
  • Elementor
  • ACF Pro
  • LMS-järjestelmät

sisältävät paljon PHP-luokkia.

OPcache vähentää niiden bootstrap-kustannusta merkittävästi.

Preloading PHP 8:ssa

PHP tukee preloadingia.

Esimerkki:

opcache.preload=/var/www/preload.php

Tämä lataa tärkeät luokat muistiin palvelimen käynnistyessä.

Sopii erityisesti:

  • enterprise-ympäristöihin
  • headless-ratkaisuihin
  • API-palveluihin

JIT ja WordPress

PHP:n JIT-kääntäjä:

opcache.jit=tracing

WordPressissä hyöty on yleensä pieni.

Tyypillisesti:

  • OPcache antaa suuren hyödyn
  • JIT antaa hyvin rajallisen lisähyödyn

Useimmissa WordPress-ympäristöissä JIT ei ole kriittinen optimointi.

OPcache ja PHP-FPM

Yhdistelmä:

NGINX
↓
PHP-FPM
↓
OPcache

on nykyinen standardi.

OPcache vähentää jokaisen PHP-workerin tekemää työtä.

Monitorointi

Seuraa:

  • hit rate
  • memory usage
  • cache restarts
  • wasted memory
  • cached scripts

Hyvä hit rate:

99%+

Yleisimmät virheet

  • liian pieni memory_consumption
  • liian pieni max_accelerated_files
  • validate_timestamps päällä tuotannossa ilman syytä
  • OPcachea ei tyhjennetä deployn yhteydessä
  • muistinkäytön seurannan puute
  • oletusasetusten käyttö suurilla sivustoilla

Esimerkkikonfiguraatio suurelle WordPress-sivustolle

opcache.enable=1
opcache.memory_consumption=512
opcache.interned_strings_buffer=32
opcache.max_accelerated_files=50000
opcache.validate_timestamps=0
opcache.save_comments=1
opcache.fast_shutdown=1

Tämä tarjoaa hyvän lähtökohdan tuotantoympäristöön.

Paras suorituskykymalli

CDN
↓
Page Cache
↓
NGINX
↓
PHP-FPM
↓
OPcache
↓
Redis
↓
Database

Tässä mallissa PHP suorittaa mahdollisimman vähän ylimääräistä työtä.

Yhteenveto

OPcache on yksi tärkeimmistä WordPress-palvelimen suorituskykyoptimoinneista. Se poistaa PHP-tiedostojen jatkuvan kääntämisen, pienentää CPU-kuormaa ja nopeuttaa WordPressin bootstrap-vaihetta merkittävästi.

Kun OPcache yhdistetään oikein konfiguroituun PHP-FPM:ään, Redis object cacheen ja tehokkaaseen page cache -ratkaisuun, WordPress pystyy käsittelemään huomattavasti suurempia liikennemääriä samalla palvelinresurssilla.

🍪