Enable OPcache, size shared memory and validate changes with observed cache usage.
What It Does and When to Use It
Example FPM INI directives; apply changes only in the runtime that serves requests. OPcache caches compiled opcodes, JIT may optimize CPU-intensive PHP, while APCu caches application-owned values.
Requirements, Inputs and Expected Behavior
Confirm the runtime, extension, environment variables, and permissions before running the examples in production. Production restarts and invalidation rules are part of the deployment plan.
Example 1: Basic Operation
Example FPM INI directives; apply changes only in the runtime that serves requests.
opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=20000
opcache.validate_timestamps=1
opcache.revalidate_freq=2
Example 2: Behavior and Validation
Read active OPcache configuration instead of assuming the edited INI file was loaded.
<?php
$config = opcache_get_configuration();
foreach (['opcache.enable','opcache.memory_consumption','opcache.validate_timestamps'] as $name) { echo $name, ': ',var_export($config['directives'][$name] ?? null,true),PHP_EOL; }
Practical Example: Application Use
Check cache statistics in the target FPM worker; CLI counters are not representative.
<?php
$status = opcache_get_status(false);
if (!$status) { echo 'OPcache disabled for this SAPI'; exit; }
$stats=$status['opcache_statistics'];
echo 'Cached: ', $stats['num_cached_scripts']??0, ' Hits: ', $stats['hits']??0;
Important Behavior and Edge Cases
The second example highlights: Read active OPcache configuration instead of assuming the edited INI file was loaded. The practical example adds: Check cache statistics in the target FPM worker; CLI counters are not representative.
Comparison with Related Approaches
| Approach | What changes |
|---|---|
| OPcache, JIT and APCu | OPcache caches compiled opcodes, JIT may optimize CPU-intensive PHP, while APCu caches application-owned values. |
| Choosing safely | Profile application response times and memory under representative traffic before tuning. |
Common Beginner Mistakes
| Mistake | Correct approach |
|---|---|
| Assuming a cache is shared across multiple servers | Confirm process- and host-level cache scope; use a distributed store when needed. |
| Never invalidating cached data | Set a TTL or versioned cache key and test release-time invalidation. |
| Skipping operational constraints | Production restarts and invalidation rules are part of the deployment plan. |
Key Takeaways
- Enable OPcache, size shared memory and validate changes with observed cache usage.
- Check cache statistics in the target FPM worker; CLI counters are not representative.
- Profile application response times and memory under representative traffic before tuning.