为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用命令行预编译 php opcache?

如何使用命令行预编译 php opcache?

PHP
繁花如伊 2023-07-01 13:08:14
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


查看完整回答
反对 回复 2023-07-01
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

可能有人会发现这个有用通过 CLI 为 php-fpm 预编译 opcache 确实有效 由于某种原因,它需要太多时间(与内存中存储的操作码相比)将缓存文件加载到内存中,但不会重新编译正在执行的 PHP 文件。

PS 这个技巧甚至适用于不同的 opcache 配置。


查看完整回答
反对 回复 2023-07-01
  • 2 回答
  • 0 关注
  • 83 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信