摘要:缓存之缓存什么是缓存当解释器完成对脚本代码的分析后,便将他们声称可以直接运行的中间代码,也成为操作码。同时它还提供一些接口用于开发人员将用户数据驻留在内存中,我们称之为。
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缓存 什么是Opcode缓存? 当解释器完成对脚本代码的分析后,便将他们声称可以直接运行的中间代码,也成为操作码(Operate Code, Opcode)。Opcode cache的目的是...
摘要:一般执行过程是先检查文件的签名或者修改时间,以防文件有改动。缓存通常都能够大幅度地提升应用程序的执行速度。二有哪些缓存插件于年月中旬改名为,集成,其他的会不会消失三为什么使用缓存主要是为了减少重复编译,从而减少和内存的开销。 一、什么是opcode缓存 当一个 PHP 文件被解释执行的时候,首先是被编译成名为 opcode (CPU 专用的机器语言指令)的中间代码,然后才被底层的虚拟...
摘要:一般执行过程是先检查文件的签名或者修改时间,以防文件有改动。缓存通常都能够大幅度地提升应用程序的执行速度。二有哪些缓存插件于年月中旬改名为,集成,其他的会不会消失三为什么使用缓存主要是为了减少重复编译,从而减少和内存的开销。 一、什么是opcode缓存 当一个 PHP 文件被解释执行的时候,首先是被编译成名为 opcode (CPU 专用的机器语言指令)的中间代码,然后才被底层的虚拟...
摘要:什么是当解释器完成对脚本代码的分析后,便将它们生成可以直接运行的中间代码,也称为操作码,。的目地是避免重复编译,减少和内存开销。这将带来显着的性能加速,通常特别是高流量和高并发量时降低了整体服务器的内存消耗,而且很少有缺点。 一、个人实践发现opcache 最近为了应对双十一期间高流量的冲击,小编通过压力测试去查找服务器性能瓶颈,发现100并发时,QPS并不是很高,但CPU和内存消耗特...
阅读 3409·2021-09-08 10:46
阅读 1164·2019-08-30 13:17
阅读 2332·2019-08-30 13:05
阅读 1175·2019-08-29 15:29
阅读 2866·2019-08-29 11:31
阅读 517·2019-08-26 12:13
阅读 1509·2019-08-26 11:42
阅读 1783·2019-08-23 18:37