opcache.file_cache我正在尝试使用控制台命令通过功能来预热 opcache 。我的 opcache.ini:opcache.enable=trueopcache.enable_cli=trueopcache.memory_consumption=128opcache.interned_strings_buffer=32opcache.use_cwd=falseopcache.max_file_size=0opcache.max_accelerated_files=32531opcache.validate_timestamps=falseopcache.revalidate_freq=0opcache.enable_file_override=trueopcache.optimization_level='0xFFFFFFFF'opcache.file_update_protection=0opcache.save_comments=falseopcache.file_cache='/tmp/.opcache'opcache.file_cache_consistency_checks=falseopcache.log_verbosity_level=0在开始 php-fpm 进程之前,我通过从 clommand 行执行 scrpt 来编译文件:$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 进程,但不使用任何预编译缓存,并且每次重新启动 php-fpm 进程时 opcache 都会编译缓存。有没有一种方法可以在不使用http请求的情况下预编译opcache?
2 回答
跃然一笑
TA贡献1826条经验 获得超6个赞
添加以下设置
opcache.file_cache_only=1
进入你的php.ini
因为opcache.file_cache_only
已经关闭了。opcache 仅在内存满时使用文件缓存。所以你想要的opcache必须使用文件缓存。请打开opcache.file_cache_only=1
。
神不在的星期二
TA贡献1963条经验 获得超6个赞
可能有人会发现这个有用通过 CLI 为 php-fpm 预编译 opcache 确实有效 由于某种原因,它需要太多时间(与内存中存储的操作码相比)将缓存文件加载到内存中,但不会重新编译正在执行的 PHP 文件。
PS 这个技巧甚至适用于不同的 opcache 配置。
- 2 回答
- 0 关注
- 125 浏览
添加回答
举报
0/150
提交
取消