美文网首页
PHP缓存之Opcode缓存

PHP缓存之Opcode缓存

作者: 人在码途 | 来源:发表于2017-02-13 22:09 被阅读123次

    PHP缓存之Opcode缓存


    1. 什么是Opcode缓存?

    当解释器完成对脚本代码的分析后,便将他们声称可以直接运行的中间代码,也成为操作码(Operate Code, Opcode)。Opcode cache的目的是避免重复编译,减少CPU和内存的开销。但是一般动态网站的性能瓶颈都在IO操作以及数据库操作,那么Opcode缓存能够带来的优化效果是有限的。

    2. Opcode缓存的原理是什么?

    当请求PHP脚本时,会经历以下几个过程:   img

    Zend引擎从文件系统读取文件、扫面器词典和表达式、解析文件、创建要执行的计算机代码(Opcode),最后执行Opcode。每一次请求都会执行以上步骤,如果我们的PHP没有变化,纳闷Opcode也应该是没有变化的,所以不必要每次都重新生成Opcode。根据这个原理,我们可以把Opcode缓存下来,再次访问相同文件时,可以直接从Opcode执行文件,启用Opcode后文件的执行流程如下:

    img

    3. 有哪些PHP Opcode缓存插件?

    Optimizer+(Optimizer+于2013年3月中旬改名为Opcache,PHP 5.5集成Opcache,其他的会不会消失?)、eAccelerator、xcache、APC …

    4. 使用APC实现Opcode缓存

    APC提供两种缓存功能,即缓存Opcode(目标文件),我们称之为apc_compiler_cache。同时它还提供一些接口用于PHP开发人员将用户数据驻留在内存中,我们称之为apc_user_cache。我们这里主要讨论apc_compiler_cache的配置。
    下载地址:http://pecl.php.net/package/APC
    最新版本为APC-3.1.6.tgz

    wget http://pecl.php.net/get/APC-3.1.6.tgz
    tar -zxvf APC-3.1.6.tgz
    cd APC-3.1.6
    /home/ad/php/bin/phpize
    ./configure --enable-apc --enable-apc-mmap  --with-php-config=/home/ad/php/bin/php-config
    make
    make install
    

    编辑php.ini,添加apc的配置

    [apc]
    extension=apc.so
    apc.enabled=1
    apc.shm_segments = 1
    apc.shm_size = 128
    apc.ttl = 0
    apc.user_ttl = 7200
    apc.num_files_hint = 1000
    apc.write_lock=1
    apc.stat = 0
    apc.max_file_size=1M
    apc.filters = a.php,b.php
    apc.cache_by_default=1
    

    配置说明:

    apc.enabled 开启apc 设置为0关闭,1为开启
    apc.shm_segments 共享内存块数
    apc.shm_size 共享内存大小,但是是M
    那么显然共享内存的总数就是apc.shm_segments*apc.shm_size
    apc.num_files_hint 允许多少个opcode被缓存
    apc.stat 为1的时候会自动检查opcode对应的php文件是否有更新,有更新的话会自动更新。设置为0的话就不会去检查了这样会提高apc的效率,但是要使php的修改生效的话就必须重启apache了,或者使用函数apc_cache_clear()来清空缓存
    apc.ttl opcode缓存的过期时间,设置为0表示不过期,如果不为0会检查两次请求之间的时间,如果时间大于设置值那么会更新opcode缓存
    apc.write_lock 表示多个进程同时更新一份opcode缓存的时候那么只让最先的一个生效,可以有效避免写冲突
    apc.max_file_size 超过设置值大小的文件不被缓存
    apc.filters 需要特例的文件,多个文件用逗号(,)相隔
    apc.filters 与 apc.cache_by_default结合使用,
    当apc.cache_by_default为1时apc.filters文件不被缓存,当apc.cache_by_default为0时仅apc.filters文件被缓存
    

    本文参考:

    http://www.cnblogs.com/JohnABC/p/4531029.html

    http://www.cnblogs.com/Alight/p/5257560.html

    相关文章

      网友评论

          本文标题:PHP缓存之Opcode缓存

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