Как предварительно скомпилировать php opcache с помощью командной строки?

Я пытаюсь разогреть opcache с помощью функции opcache.file_cache с помощью консольной команды.

Мой 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

прежде чем я начну свой процесс php-fpm, я компилирую файлы, выполняя scrpt из строки clomand:

$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;

Этот скрипт создает скомпилированные файлы в указанный каталог (/tmp/.opcache). Затем я запускаю процесс php-fpm, но предварительно скомпилированный кеш не используется, а opcache компилирует кеш при каждом перезапуске процесса php-fpm.

Есть ли способ прекомпилировать opcache без использования http-запросов?


person Danylo Pervozdanniy    schedule 26.06.2020    source источник
comment
Поскольку веб-версия и версия CLI разделены, вам нужно будет что-то сделать в соответствующей среде, чтобы повлиять на opcache для этой среды.   -  person Nigel Ren    schedule 26.06.2020


Ответы (1)


Может быть, кто-то найдет это полезным Предварительная компиляция opcache для php-fpm через CLI действительно работает. По какой-то причине требуется слишком много времени (по сравнению с хранящимися в памяти кодами операций) для загрузки кэшированных файлов в память, но не выполняется перекомпиляция файлов PHP.

P.S. Этот трюк работает даже для разных конфигураций opcache.

person Danylo Pervozdanniy    schedule 30.06.2020