I'm trying to warm up opcache via opcache.file_cache
feature using console command.
My opcache.ini:
opcache.enable=true
opcache.enable_cli=true
opcache.memory_consumption=128
opcache.interned_strings_buffer=32
opcache.use_cwd=false
opcache.max_file_size=0
opcache.max_accelerated_files=32531
opcache.validate_timestamps=false
opcache.revalidate_freq=0
opcache.enable_file_override=true
opcache.optimization_level='0xFFFFFFFF'
opcache.file_update_protection=0
opcache.save_comments=false
opcache.file_cache='/tmp/.opcache'
opcache.file_cache_consistency_checks=false
opcache.log_verbosity_level=0
before I start my php-fpm process I compile files by executing scrpt from clommand line:
$getDirs = static function () use ($argv): array {
$dirs = $argv;
unset($dirs[0]);
return $dirs;
};
$files = \Symfony\Component\Finder\Finder::create()->in($getDirs())
->name('*.php')
->ignoreUnreadableDirs()
->notContains('#!/usr/bin/env php')
->notPath(get_included_files())
->files()
->followLinks();
$compiled = 0;
foreach ($files as $file) {
try {
if (!opcache_is_script_cached($file->getRealPath())) {
opcache_compile_file($file->getRealPath());
}
$compiled++;
} catch (Throwable $e) {
}
}
echo 'Cached ' . $compiled . ' files' . PHP_EOL;
This script generates compiled files to specified (/tmp/.opcache
) directory.
Then I start php-fpm process, but no precompiled cache is not used and opcache compiles cache every time php-fpm process being restarted.
Is there a way to precompile opcache without using http requests?
May be someone will find this useful Precompiling opcache for php-fpm via CLI does work For some reason it takes too much time (compared with in-memory stored Opcodes) to load cached files into memory, but no recompilation of PHP files being executed.
P.S. This trick works even for different opcache confgurations.