资讯专栏INFORMATION COLUMN

PHP缓存之Opcode缓存

Near_Li / 2779人阅读

摘要:缓存之缓存什么是缓存当解释器完成对脚本代码的分析后,便将他们声称可以直接运行的中间代码,也成为操作码。同时它还提供一些接口用于开发人员将用户数据驻留在内存中,我们称之为。

PHP缓存之Opcode缓存


什么是Opcode缓存?

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

Opcode缓存的原理是什么?

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

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

有哪些PHP Opcode缓存插件?

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

使用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/JohnAB...

http://www.cnblogs.com/Alight...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/61844.html

相关文章

  • PHP缓存Opcode缓存

    摘要:缓存之缓存什么是缓存当解释器完成对脚本代码的分析后,便将他们声称可以直接运行的中间代码,也成为操作码。同时它还提供一些接口用于开发人员将用户数据驻留在内存中,我们称之为。 PHP缓存之Opcode缓存 什么是Opcode缓存? 当解释器完成对脚本代码的分析后,便将他们声称可以直接运行的中间代码,也成为操作码(Operate Code, Opcode)。Opcode cache的目的是...

    Lucky_Boy 评论0 收藏0
  • phpopcode缓存

    摘要:一般执行过程是先检查文件的签名或者修改时间,以防文件有改动。缓存通常都能够大幅度地提升应用程序的执行速度。二有哪些缓存插件于年月中旬改名为,集成,其他的会不会消失三为什么使用缓存主要是为了减少重复编译,从而减少和内存的开销。 一、什么是opcode缓存 当一个 PHP 文件被解释执行的时候,首先是被编译成名为 opcode (CPU 专用的机器语言指令)的中间代码,然后才被底层的虚拟...

    zhangrxiang 评论0 收藏0
  • phpopcode缓存

    摘要:一般执行过程是先检查文件的签名或者修改时间,以防文件有改动。缓存通常都能够大幅度地提升应用程序的执行速度。二有哪些缓存插件于年月中旬改名为,集成,其他的会不会消失三为什么使用缓存主要是为了减少重复编译,从而减少和内存的开销。 一、什么是opcode缓存 当一个 PHP 文件被解释执行的时候,首先是被编译成名为 opcode (CPU 专用的机器语言指令)的中间代码,然后才被底层的虚拟...

    codercao 评论0 收藏0
  • php系列框架的加速器Opcache

    摘要:什么是当解释器完成对脚本代码的分析后,便将它们生成可以直接运行的中间代码,也称为操作码,。的目地是避免重复编译,减少和内存开销。这将带来显着的性能加速,通常特别是高流量和高并发量时降低了整体服务器的内存消耗,而且很少有缺点。 一、个人实践发现opcache 最近为了应对双十一期间高流量的冲击,小编通过压力测试去查找服务器性能瓶颈,发现100并发时,QPS并不是很高,但CPU和内存消耗特...

    lauren_liuling 评论0 收藏0

发表评论

0条评论

Near_Li

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<