简介
Alternative PHP Cache (APC) 是一个开放自由的PHP opcode 缓存。它的目标是提供一个自由、 开放,和健全的框架用于缓存和优化PHP的中间代码。它是一个PECL扩展,APC直接安装在Zend引擎上,如果请求且并没过期,他可以提供一种缓存系统,将请求重定向到已缓存的Opcode,APC使用共享内存和映射表来为特定的PHP脚本获取Opcode。
安装
APC是一个PECL扩展,可以用pecl命令来安装
pecl install apc
在PHP.ini中添加 extension=apc.so
重启web服务器用phpinfo(),查看是否已经有了apc扩展。
如果看到类似下图,说明安装成功了
实例测试
首先我们先禁用apc,在php.ini中找到我们刚添加的extension=apc.so,再其下面添加一行:apc.enabled = 0,重启web服务器,phpinfo()看一下:
下面我们用ab对下面这段代码进行基准测试。
<?php $array = array(); $count = 100000; for($i = 0; $i < $count; $i++) { $array[] = $i; } for($i = 0; $i < $count; $i++) { print_r($i); echo "<br /-->"; }
ab -n 100 www.test.com/index.php
下面我们开启apc,将php.ini中的apc.enabled = 0改为apc.enabled = 1重启web服务器,查看phpinfo();
下面用ab再次对刚才的代码进行基准测试。
ab -n 100 www.test.com/index.php
可以看到我们仅是开启了apc,现在就有了一些效果。我们看到,运行总时间由未使用apc前的的9.420377秒下降到了8.514684秒,每秒钟可以支持的请求数由原来的10.62上升到了11.74。我们用apc的默认配置,使得性能有了一些提高。要判断速度是否可以进一步提高,需要深入研究apc设置并决定应该启用或禁用哪些配置来提高性能。下表给出了apc的常用设置。
属性名称 |
说明 |
---|---|
apc.cache_by_default |
默认启用缓存。1表示“启用”,0表示“禁用” |
apc.filters |
根据逗号分隔的POSIX正则表达式判断文件需要缓存还是不需要缓存。以a+开头的正则 |
apc.stat |
启用或禁用APC对于所有请求PHP脚本是否有更改的检查。每次调用脚本时均会执行此 |
apc.enabled |
启用或禁用APC缓存。0=禁用,1=启用,默认1 |
apc.shm_size |
设置APC允许使用的共享内存大小,此值以兆字节为单位 |
apc.shm_segments |
设置可用的共享内存段总数 |
apc.include_once_override |
启用或禁用include_once和require_once的优化。启用该设置时,可减少PHP内部函数进行的额外系统调用。0=禁用,1=启用,默认0 |
apc.optimization |
设置优化级别。0=禁用优化功能 |
apc.num_files_hint |
设置你认为需要缓存的文件数。默认值1000,如果不确定文件数,可以设置0 |
apc.ttl |
设置文件存储在缓存中的过期时间,以秒为单位。 |
apc.write_lock |
开启该设置将强制单个进程缓存特定的脚步。适用于必须缓存多个文件的大流量WEB服务器或应用程序
|
我们针对刚才的代码进行apc设置,在php.ini中设置apc的配置,找到apc.enabled = 1这一行,在下一行加上如下配置,重启web服务器,在进行一次基准测试,看下效果。
apc.enabled = 1 apc.stat = 0 apc.shm_size = 16 apc.optimization = 9 apc.num_files_hint = 1 apc.write_lock = 1
ab -n 100 www.test.com/index.php
可以看到性能又提高了一些。为了达到最佳效果需要对上面的设置进行尝试,找到比较理想的值。
当然,apc不仅可以缓存Opcode,它还可以缓存变量。将在后续介绍。。。