淘小兔

  1. 什么是Opcode缓存?

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

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

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

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

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

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

  1. 使用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.tgztar -zxvf APC-3.1.6.tgzcd APC-3.1.6/home/ad/php/bin/phpize./configure --enable-apc --enable-apc-mmap  --with-php-config=/home/ad/php/bin/php-configmakemake install

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

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

配置说明:

apc.enabled 开启apc 设置为0关闭,1为开启apc.shm_segments 共享内存块数apc.shm_size 共享内存大小,但是是M那么显然共享内存的总数就是apc.shm_segments*apc.shm_sizeapc.num_files_hint 允许多少个opcode被缓存apc.stat1的时候会自动检查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文件被缓存

 

下载仅供下载体验和测试学习,不得商用和正当使用。

下载体验

请输入密码查看内容!

如何获取密码?

 

点击下载