• 前端
  • JS
  • CSS
  • HTML
  • Mysql
  • Linux
  • SVN
  • 环境uedbet官网手机版最新
  • uedbet西甲体育投注详解
  • MAC_BOOK
  • 算法
  • php扩展之opcache
    By skyshappiness Posted 2020-11-20 20:14:17 In

    一、简介

         通过将PHP脚本预编译的字节码(Operate Code)存放在共享内存中,避免每次请求都要加载和解析PHP脚本,解析器可以直接从共享内存读取已缓存的字节码。


    二、缓存内容

        包括 

              1、opcode 操作码、字节码

              2、interned string 预留字节码(可以理解为php请求生命周期中不需要释放的字符串,包括:变量名、类名、方法名、字符串、注释等)

        缓存以 key-value 的形式存储,key 是脚本文件名的真实路径。例:

              一个index.php文件中引入了 a.php 和 b.php, b.php又引入了 c.php。当一个请求到达 index.php 时,php会分别编译 index.php、a.php、b.php、c.php,每个 php 文件分别作为一个 key-value 存储到 opcache 中。

         注意点:

               即使opcache可以缓存多个php脚本到操作码,避免每次请求都发生编译,但这并不意味着它的效率和 .exe 一样高。因为即使消除了编译的开销,每次请求php还是需要从缓存获取文件,检查源文件是否被修改,对多个编译后的文件进行链接(如include、require), 将用到的类或函数从 opcache 拷贝至进程的内存空间,这些都需要开销。如果想要进步节省开销,可以考虑使用 preloading 功能。


    三、常用uedbet官网手机版最新:

         opcache.enable=1                                   #启用操作缓存码

         opcache.memory_consumption=128         #opcache的共享内存大小,单位:M

         opcache.interned_strings_buffer=8           #存储预留字符串的内存大小,单位:M

         opcache.max_accelerated_files=10000      #opcache哈希表中可存储的脚本文件数量上限。{223,463,983,1979,3907,7963,16229,32531,65407,130987} 这些质数中选择

         opcache.max_wasted_percentage=5         #浪费内存的上限,以百分比计

         opcache.validate_timestamps=0               #是否每隔一段时间检测脚本是否更新,一般不开启此参数;使用 opcache_reset() 代替,这样上线时可控,不会对流量峰值造成影响

         opcache.revalidate_freq=2                       #检查更新脚本的间隔时间,配合validate_timestamps使用


         对 opcache.validate_timestamps 和 opcache.revalidate_freq 的说明:

              若干秒检查php脚本文件是否有更新,然后更新opcache缓存。其实质每次检测都是一次 stat 系统调用,stat 系统调用会进行磁盘I/O,消耗部分CPU,更加浪费性能。

              在生产环境中可能出现的情况:文件A的opcache更新了,但是文件B的还没更新,A include B,由于B的opcache还没更新,导致报错。

              解决方案:

                   1、将 validate_timestamps 设置为 0;这样就不会自动去更新 opcache 中的缓存; 改用手动调用 opcache_invalidate() 的php脚本,重新编译上线的脚本。

                   2、将 validate_timestamps 设置为 0;平滑重启php-fpm,并执行一个自定义的预知性php脚本,将项目中的所有php脚本进行 opcache_compile_file() 操作,然后才开始接收用户的请求。

                   3、 composer 安装 cachetool 清除 opcache


    四、cachetool 安装

          首先查看php版本,然后查找对应版本的 cachetool

          curl -sO https://gordalina.github.io/cachetool/downloads/cachetool-3.2.2.phar //下载对应的 cachetool版本

          php71 cachetool.phar opcache:reset --fcgi           //清除缓存

          php71 cachetool.phar opcache:status.                 //查看状态

          php71 cachetool.phar opcache:configuration.       //查看uedbet官网手机版最新项



    参考资料:

    1、php常用扩展:https://zbpblog.com/blog-382.html

    2、github:cachetool

    友情链接
    联系方式
  • 邮箱 / E-mail:121388038@qq.com