`
hongtoushizi
  • 浏览: 374849 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

php的opcode缓存

    博客分类:
  • php
阅读更多

前言:由php的运行机制决定,其实php在运行阶段我们也是可以进行缓存的从而提高程序运行效率,这就是我们常说的opcode缓存。
1、简述php的运行机制
(因为本文是写opcode缓存的所以这里只是简要概述,后边会专门写一篇揭秘php运行机制的。)
a).php文件通过浏览器过来
b)请求交给SAPI,随后SAPI层将控制权转给PHP
c)zend_language_scanner对代码进行扫描,对php代码进行词法分析转换成一系列的tokens array
d)zend_language_parser将c步骤产生的一系列tokens处理掉空格等无用的代码以后转换成一系列表达式
e)经过compiler阶段生成opcode返回zend_op_array指针
f)zend_vm_execute根据传入的zend_op_array指针,执行opcode并将结果返回输出
(下图来自互联网,但是描述的很不错借花献佛了)

2、opcode简介
Opcode是operation code(操作码)的简称,其实就是第一小节c)、d)、e)步骤产生的一种中间码,
opcode是一个四元组,(opcode, op1, op2, result),它们分别代表操作码,第一操作数,第二操作数,结果。
如:

1
2
3
<?php
echo "taobao search blog";
?>

对应的tokens

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
Array
(
    [0] => Array
        (
            [0] => 367
            [1] => <?php
            [2] => 1
        )
 
    [1] => Array
        (
            [0] => 316
            [1] => echo
            [2] => 1
        )
 
    [2] => Array
        (
            [0] => 370
            [1] =>
            [2] => 1
        )
 
    [3] => Array
        (
            [0] => 315
            [1] => "taobao search blog"
            [2] => 1
        )
 
    [4] => ;
    [5] => Array
        (
            [0] => 370
            [1] =>
            [2] => 1
        )
 
    [6] => Array
        (
            [0] => 369
            [1] => ?>
            [2] => 1
        )
 
)

对应的opcode就是

1
2
3
4
5
line     # *  op                           fetch          ext  return  operands
---------------------------------------------------------------------------------
   2     0  >   ECHO                                                     'taobao+search+blog'
   4     1    > RETURN                                                   1
         2*   > ZEND_HANDLE_EXCEPTION

3、使用apc对opcode缓存
a)假设php路径为/home/ad/php
对opcode进行缓存的软件很多(apc、eAcclerator、Xcache、Zend Platform),这里主要介绍apc
APC提供两种缓存功能,即缓存Opcode(目标文件),我们称之为apc_compiler_cache。同时它还提供一些接口用于PHP开发人员将 用户数据驻留在内存中,我们称之为apc_user_cache。我们这里主要讨论apc_compiler_cache的配置。
下载地址:http://pecl.php.net/package/APC
最新版本为APC-3.1.6.tgz

1
2
3
4
5
6
7
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的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
[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

重新apache就ok啦

4、常用参数的解析
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.searchtb.com/2010/12/php-opcode-cache.html

分享到:
评论

相关推荐

    PHP中opcode缓存简单用法分析

    在PHP中,opcode缓存是一个重要的性能优化技术,它通过缓存PHP脚本编译后的中间代码来提高应用程序的执行效率。以下是针对标题“PHP中opcode缓存简单用法分析”及描述中的知识点的详细说明: 1. opcode的概念:在...

    PHP OPCode缓存 APC详细介绍

    PHP OPCode缓存是提高PHP性能的关键技术之一。在解释型语言PHP中,代码需要经过解释器逐行解析成操作码(OPCode)才能执行,这个过程在每次请求时都会发生,导致性能损耗。OPCode缓存机制可以将解析后的OPCode存储在...

    CacheTool:一个清除APC/opcode缓存的类库.zip

    CacheTool是一款专为PHP开发者设计的工具,用于管理和清除应用程序缓存(APC)和opcode缓存。在深入了解CacheTool之前,我们先来了解一下APC和opcode缓存这两个概念。 **1. APC(Alternative PHP Cache)** APC是...

    Pocs:Procs代表PHP Opcode缓存状态,并提供一个包含一些OpCache信息的简单仪表板

    Pocs代表PHP Opcode缓存状态,并提供带有一些信息的简单仪表板。 特征 显示当前状态 显示所有缓存的脚本 显示设置 通过使用基本HTTP身份验证来保护仪表板的可能性 甜甜圈图用于存储,按键,命中和重新启动 脚本的...

    为PHP5.4开启Zend OPCode缓存

    标题中的“为PHP5.4开启Zend OPCode缓存”是指在PHP 5.4版本中启用 Zend OPCode 缓存这一功能。OPCode缓存是PHP的一种优化机制,它将PHP源代码编译成中间代码(OPCode)并存储在内存中,以避免每次请求时重复编译,...

    CacheTool:一个清除APC/opcode缓存的类库

    其中,Alternative PHP Cache (APC) 和 Zend Optimizer+ 的Opcode缓存是两个常用的PHP加速工具。它们能够将PHP代码编译为中间语言(Opcode),减少解释器的工作量,提高执行效率。然而,随着代码更新,有时需要清除...

    php文件缓存

    1. **Opcode缓存**:如APC (Alternative PHP Cache)、eAccelerator、OpCache(自PHP 5.5起内置)。这些缓存工具将编译后的PHP字节码存储在内存中,下次请求相同脚本时,可以直接从内存中读取,跳过编译步骤。OpCache...

    xcache-3.2.0.tar.gz

    XCache 是一个又快又稳定的 PHP opcode 缓存器. 经过良好的测试并在大流量/高负载的生产机器上稳定运行. 经过(在 linux 上)测试并支持所有现行 PHP 分支的最新发布版本, 如 ...

    PHPcachetool清除APC_opcode缓存库.zip

    &lt;?php namespace CacheTool; use CacheTool\Code; class CodeTest extends \PHPUnit_Framework_TestCase ... public function testFactory() ...PHPcachetool清除APC_opcode缓存库就是这么一个库。

    微软平台之上的PHP.pdf

    PHP的性能优化方面,提到了PHP的几种缓存机制:PHP opcode缓存(例如APC)可以将编译后的PHP脚本二进制代码存储在内存中,减少动态编译的时间;文件缓存可以减少对PHP脚本文件的IO操作;相对文件路径缓存则可以存储...

    《构建高性能Web站点》节选 - 动态脚本加速 - 避免重复编译.pdf

    APC(Alternative PHP Cache)是一款高效的opcode缓存器,它可以显著提高PHP脚本的执行效率。在配置文件php.ini中开启APC的opcode缓存功能非常简单: ```ini apc.cache_by_default=on ``` 使用APC后,我们可以对...

    XCache-3.0.3

    XCache是一款高效、稳定的PHP opcode缓存器,它的主要功能是提升PHP应用的性能。在理解XCache之前,我们需要先了解opcode缓存的概念。PHP是一种解释型语言,每次运行PHP脚本时,都需要将源代码解析成中间代码...

    xcache缓存配置

    Xcache是一款高性能的PHP opcode缓存系统,旨在提升PHP应用程序的执行速度。通过将PHP代码编译后的opcode存储在共享内存中,避免了每次请求时重新编译PHP脚本的过程,从而显著提高了PHP程序的运行效率。本文将基于...

    LAMP平台安装Xcache和Memcached加速网站运行.docx

    Xcache是一个高效的PHP opcode缓存器,而Memcached则是一个分布式内存对象缓存系统。 **Xcache安装步骤**: 1. **下载源文件**:由于yum仓库中没有Xcache,所以需要从官网下载最新版,例如版本3.2.0,使用`wget`...

    PHP常见缓存技术分析(cache)

    总结,PHP的缓存技术涵盖了从低级的opcode缓存到高级的分布式内存存储解决方案,开发者可以根据项目规模、性能需求和资源限制选择合适的缓存方法。理解并熟练运用这些缓存技术,能够有效地优化PHP应用的性能,提升...

    facebook技术架构.pdf

    2. APC:全称是Alternative PHP Cache,它是一种PHP opcode缓存系统,它可以缓存预编译的脚本码,从而减少编译开销。Facebook使用APC缓存了数百个库中的成千上万的函数,以及数以百兆计的数据。APC的用户缓存用于...

Global site tag (gtag.js) - Google Analytics