linux安装apc服务加速php

一、基础原理
1、APC全称为Alternative PHP Cache,是一个开放自由的PHP opcode 缓存。它的目标是提供一个自由、 开放,和健全的框架用于缓存和优化PHP的中间代码。

2、opcode为计算机指令中的一部分,先了解下运行机制
首先先从浏览器过来,
请求交给SAPI,随后SAPI层将控制权转给PHP,
其次zend_language_scanner对代码进行扫描,对php代码进行词法分析转换成一系列的tokens array,
zend_language_parser将上一步骤产生的一系列tokens处理掉空格等无用的代码以后转换成一系列表达式,
最后经过compiler阶段生成opcode返回zend_op_array指针。
其实,opcode就是将php编译为一系列指令来供计算机执行,而且php的底层就是用c来开发的。

3、apc是将产生的opcode进行缓存之内存或临时文件中。从而避免相同的程序再次编译以提高php运行速度。


二、APC使用方法
1、系统缓存
系统缓存是当你安装之后就开始了自行运行,并将php编译后产生的opcode缓存起来,当第二次调用时会对比你在php.ini中设置的超时时间是否过期,类似于memcache过期机制。而apc一般在使用上都只做本地cache这层。

2、用户缓存
由开发人员在开发php时用apc_store和apc_fetch函数操作读取、写入,但不支持分布式,而且apc本身最大的利用价值就在于加速php。如果用apc去缓存用户数据,还是推荐memcache。毕竟,涉及到缓存这层的架构已经不是小型网站了。而且memcache支持分布式,使用方便灵活。

3、apc监控
apc源码包自带了一个apc.php程序,用来监控系统、用户缓存和占用量数据。
(来源漫步游www.manbuyou.comapc统计数据)

(来源漫步游www.manbuyou.com系统缓存数据)


三、APC安装与配置
下载最新版本http://pecl.php.net/package/APC,目前最新版本为APC-3.1.13.tgz
1、下载安装
tar -zxvf APC-3.1.13.tgz
/usr/local/php/bin/phpize
./configure --enable-apc --enable-apc-mmap --with-php-config=/usr/local/php/bin/php-config
make && make install

2、校验
1) make成功后会显示如下信息
Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/
Installing header files:         /usr/local/php/include/php/

2) 或查看是否安装成功,(安装后会默认生成apc.so文件在php扩展包中)
ll /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/apc.so  (no-debug-non-zts-20100525 根据php版本变动,不一定是这个目录)

3) 或者查看phpinfo信息,是否有apc模块

3、修改php.ini文件
/* 增加apc配置至php配置文件中 */
vim /usr/local/php/etc/php.ini
shift+g #将光标移到文件底部

/* 粘贴到php.ini中 */
[apc]
extension=apc.so
apc.enabled = 1
apc.cache_by_default = on
apc.shm_segments = 1
apc.shm_size = 64m
apc.ttl = 7200
apc.user_ttl = 7200
apc.num_files_hint = 0
apc.write_lock = On

4、重启服务
killall php-fpm
/usr/local/php/sbin/php-fpm

5、如若想查看统计数据则把apc源码包中的apc.php cp 到你的网站目录  http://www.xxx.com/apc.php 访问

6、更新缓存
其中有这么一项:apc.stat=1/0
这个选项是否启用脚本更新检查。 改变这个指令值要非常小心。 默认值 On 表示APC在每次请求脚本时都检查脚本是否被更新, 如果被更新则自动重新编译和缓存编译后的内容。但这样做对性能有不利影响。 如果设为 Off 则表示不进行检查,从而使性能得到大幅提高。 但是为了使更新的内容生效,你必须重启Web服务器(译者注:如果采用cgi/fcgi类似的,需重启cgi/fcgi进程)。 生产服务器上脚本文件很少更改, 可以通过禁用本选项获得显著的性能提升。

这个指令对于include/require的文件同样有效。但是需要注意的是, 如果你使用的是相对路径,APC就必须在每一次include/require时都进行检查以定位文件。 而使用绝对路径则可以跳过检查,所以鼓励你使用绝对路径进行include/require操作。

四、apc配置参数说明
[apc]
extension=apc.so
#加载apc扩展
apc.enabled = 1
#是否启用APC
apc.cache_by_default = on
#是否默认对所有文件启用缓冲。 若设为Off并与以加号开头的apc.filters指令一起用,则文件仅在匹配过滤器时才被缓存
apc.shm_segments = 1
#为编译器缓冲区分配的共享内存块数量(建议值为1)。
apc.shm_size = 64
每个共享内存块的大小(以MB为单位,建议值为128~256)。
apc.ttl = 7200
#缓存条目在缓冲区中允许逗留的秒数。0 表示永不超时。建议值为7200~36000。设为 0 意味着缓冲区有可能被旧的缓存条目填满,从而导致无法缓存新条目。
apc.user_ttl = 7200
#类似于apc.ttl,只是针对每个用户而言,建议值为7200~36000。
apc.num_files_hint = 0
#Web服务器上可能被包含或被请求的不同源文件的大致数量(建议值为1024~4096)。如果你不能确定,则设为 0 ;此设定主要用于拥有数千个源文件的站点。
apc.write_lock = On
#是否启用写入锁。在非常繁忙的服务器上,无论是启动服务还是修改文件,都可能由于多个进程企图同时缓存一个文件而导致竞争条件启用该指令可以避免竞争条件的出现。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章