美文网首页
laravel-opcache 安装残记

laravel-opcache 安装残记

作者: 淡淡de盐 | 来源:发表于2019-11-14 14:47 被阅读0次

    开启 OPcache

    根据服务器情况修改php.ini

    /etc/php/7.2/fpm/php.ini
    

    编辑以上文件,搜索 opcache.enable 将值设为 1 即为开启:

    opcache.enable=1
    

    php.ini 里相关的配置以下,注释里包括说明和推荐设置的值,请详细阅读:

    ; 是否在命令行开启,这里默认设置为 0 ,暂且关闭
    ;opcache.enable_cli=0
    
    ; 这个内存是用来存储编译后的字节码的,视你的程序
    ; 代码量而定,Laravel 应用一般建议设置为 256,单位 MB,
    ; 默认是 128
    opcache.memory_consumption=256
    
    ; 会对程序所有的字符串进行统一存储以加快存取速度,
    ; 默认是 8m,建议 32 或者不超过 64。
    opcache.interned_strings_buffer=32
    
    ; 最大加速多少个脚本文件,视项目脚本文件数而定,
    ; 合理区间 200~1000000 ,默认是 10000 ,建议 500000
    opcache.max_accelerated_files=1000000
    
    ; 最大作废比例百分比,到达这个比例会重启,默认是 5 ,建议 10
    opcache.max_wasted_percentage=10
    
    ; 开启情况下会在脚本名称前加上当前目录信息做为缓存的 Key,关闭可以
    ; 提高性能,但是会面临出错的风险(文件名一致时),建议开启,关闭使用 0
    opcache.use_cwd=1
    
    ; 开启的话,会按照 opcache.revalidate_freq 设置的频率去检查文件
    ; 是否修改以便重新缓存,默认开启,生产环境下请设置为关闭,然后
    ; 写自动化脚本,在每次更新代码后自动重启 OPcache
    opcache.validate_timestamps=0
    
    ; 文件更新检测频率,单位秒,只有在 opcache.validate_timestamps 
    ; 开启时才有效。默认为 2,意味着 2 秒钟检查一次,会对文件系统造
    ; 成负担,如果是在开发环境中请酌情使用,生产环境随意设置,因为
    ; 我们会设置 validate_timestamps 为关闭。
    opcache.revalidate_freq=2200
    
    ; 文件加载的逻辑,默认关闭,无需修改
    ;opcache.revalidate_path=0
    
    ; 开启的话会把代码注释一起缓存,关闭可减低内存使用,但是
    ; 如果有一些代码依赖于注释里的指令,例如 Doctrine, 
    ; Zend Framework 2 和 PHPUnit,将会出现问题。建议开启
    opcache.save_comments=1
    

    修改完成后,需要重启 FPM 生效:

    $ service php-fpm restart

    在 Laravel 中使用 OPcache

    生产环境下,我们一般会将 opcache.validate_timestamp 设置为 0 以获取最大性能。然后在代码变跟时候,再重置 OPcache。

    Laravel安装

    $  composer require appstract/laravel-opcache
    $  php artisan vendor:publish --provider="Appstract\Opcache\OpcacheServiceProvider" --tag="config"
    

    Lumen安装

    $  composer require appstract/laravel-opcache
    
    bootstrap 增加注册
    $app->configure('opcache');
    $app->register(Appstract\Opcache\OpcacheServiceProvider::class);
    
    config 增加配置文件 opcache.php
    <?php
    
    return [
        'url'         => env('OPCACHE_URL', config('app.url')),
        'prefix'      => 'opcache-api',
        'verify_ssl'  => true,
        'headers'     => [],
        'directories' => [
            base_path('app'),
            base_path('bootstrap'),
            base_path('public'),
            base_path('routes'),
            base_path('vendor/appstract'),
            base_path('vendor/composer'),
            base_path('vendor/laravel/lumen-framework'),
            base_path('vendor/illuminate'),
            base_path('resources'),
            base_path('storage'),
            base_path('vendor'),
        ],
        'exclude'     => [
            'test',
            'Test',
            'tests',
            'Tests',
            'stub',
            'Stub',
            'stubs',
            'Stubs',
            'Dumper',
        ],
    ];
    
    因为lumen没有config_path函数,在app下创建helper.php
    <?php
    
    if (!function_exists('config_path')) {
        /**
         * Get the configuration path.
         *
         * @param string $path
         *
         * @return string
         */
        function config_path($path = '')
        {
            return app()->basePath() . '/config' . ($path ? '/' . $path : $path);
        }
    }
    
    composer.json 增加 files
    "autoload": {
        "classmap": [
          "database/seeds",
          "database/factories"
        ],
        "psr-4": {
          "App\\": "app/"
        },
        "files": [
          "app/helper.php"
        ]
      },
    
    运行 composer 命令加载文件
    $  composer dump-autoload
    

    每次更新代码都要注意,先清缓存,再整体执行优化,命令:

    $  php artisan opcache:clear
    $  php artisan opcache:optimize
    

    最后说下我遇到未解决的问题

    在服务器上使用 php artisan opcache:clear 时返回错误,[ OPcache not configured ],在查看代码时。发现是 opcache_reset() 函数返回了 false 。最后也没有发现是什么原因造成的,感觉可能是环境问题!

    相关文章

      网友评论

          本文标题:laravel-opcache 安装残记

          本文链接:https://www.haomeiwen.com/subject/jferictx.html