1.PHP缓存加速器介绍

    (1)操作码的介绍和加速器的原理

    当客户请求一个PHP程序时,服务器的PHP引擎会解析该PHP程序,并将其编译为特定的操作码(Operate Code,简称opcode文件),该文件是执行PHP代码后的一种二进制的表示形式。默认情况下,这个编译好的的操作码文件由PHP引擎执行后丢弃。而操作码缓存(opcode cache)的原理就是将编译后的操作码报错下来,并放到共享内存里,以便在下次调用PHP页面时重用它,它避免了相同代码的重复编译,节省了PHP引擎重复编译的时间,降低了服务器负载,同事减少了CPU和内存的开销。

    (2)PHP缓存加速器软件介绍

    为了提高PHP引擎的高并发访问以及执行速度,产生了一系列PHP缓存加速软件。这些软件设计的目的就是缓存前文提到的PHP引擎解析过的操作码文件,以便在指定的时间内有相同的PHP程序请求访问时,不需要重复解析编译,而是直接调用缓存中的PHP操作码文件,这样就提高了动态Web服务的处理速度,从而提升了用户访问企业网站的整体体验。

    (3)LNMP环境PHP缓存加速器的原理详解。

    在LNMP环境中,PHP引擎使用独立的FCGI(即php-fpm进程,Apache用的是libphp.so模块),由他来侦听来自Nginx的PHP程序请求,并交给PHP引擎处理,整个的执行流程大概如下。

    1)Nginx接收客户端的PHP程序访问请求

    2)Nginx根据拓展名等过滤规则将PHP程序请求传递给解析PHP的FCGI进程。

    3)PHP FPM进程调用PHP解析器读取站点磁盘上的PHP文件,并加载到内存中。

    4)PHP解析器将PHP程序编译成opcode文件,然后把opcode缓存起来。

    5)PHP FPM引擎执行opcode树后,返回数据给Nginx,进而返回客户端

    6)Nginx接收客户新的PHP程序请求,PHP引擎就会直接读取缓存中的opcode并执行,将结果返回。不需要进行第四部,提高了php编译解析效率。

2.PHP缓存加速器安装环境准备

    PHP缓存加速软件种类不少,比如eAccelerator,APC,Xcache,ZendOpcache等。在这里我们选择时候Xcache,原因是Xcache的效率较高,社区的活跃度较高,支持5.6版本的PHP。ZendOpcache可能是未来的首选,为官方的加速器软件,但是目前用的人还不多。

    在安装Xcache加速器前,我们需要安装好LNMP的完整的环境,在前面我们就已经安装配置好了LNMP的服务环境了。安装的版本如下

项目 版本
Linux CentOS release 6.5 (Final)
Nginx nginx-1.12.2
MySQL 5.6.31 64bit
PHP php5.6.31
3.安装Xcache缓存加速器

    因为我们用的PHP版本为5.6,通过Xcache官网可以了解到需要用到3.20的版本才能支持PHP5.6,可以到官网下载。http://xcache.lighttpd.net/。安装的步骤为解压,编译安装,具体的命令如下:

tar -xf xcache-3.2.0.tar.gz
cd xcache-3.2.0.tar.gz
/usr/local/php/bin/phpize        #必不可少的一步
./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config 
make
make install

    编译安装的过程中如果提示缺少什么类库文件,可以用yum开安装,安装成功之后会在php目录下生成xcache.so的文件。

blob.png

4.安装数据库缓存及其他的PHP拓展插件(可选)

    (1)安装PHP Memcached拓展插件

    Memcached是一个开源,支持高性能,高并发及分布式的内存缓存服务软件。在传统的场景下,多数的Web应用都将数据保存到数据库中,WWW服务器从中读取数据并在浏览器中显示。但随着数据量的增大,访问的集中,就会出现RDBMS的负担加重,数据库响应缓慢,网站打开延迟的问题。使用Memcached的主要目的是,通过在自身内存中缓存数据库的查询结果,减少数据访问次数,以达到减少前端业务对数据库的直接高并发访问,从而提高大规模网站集群动态服务的并发访问能力。

    Memcached我们会在以后的博文再做详细的介绍,这里我们只安装Memcachedd的客户端软件——Memcache,为了以后搭建好Memcached服务后可以使用。安装的步骤如下:

tar -xf  memcache-2.2.7.tgz
/usr/local/php/bin/phpize        #必不可少的一步
./configure --enable-memcache --with-php-config=/usr/local/php/bin/php-config 
make
make install

    安装成功之后会在php目录下生成memcache.so的文件。

blob.png

    (2)安装ImageMagick图像软件

    ImageMagick是一套功能强大,稳定而且免费的工具包和开发包,可以用来读写和处理89种基本格式额图片文件。利用ImageMagick,可以根据web应用程序的需要动态生成图片,还可以对一个(或一组)图片进行改变大小,旋转,锐化等操作,并将操作的结果以相同的格式或者其他格式保存。安装的步骤如下:

tar -xf ImageMagick-6.7.9-9.tar.xz
cd ImageMagick-6.7.9-9
./configure
make
make install

    PS:这个软件不是PHP的拓展,所以是没有生成.so,后面安装的imagick插件就会生成对应的.so文件。

    (3)imagick插件工作需要ImageMagick软件的支持,所以需要先安装ImageMagick软件,否则安装不了该插件。安装的办法同上:

tar  -xf imagick-3.4.3.tgz            #之前打算安装2.3的版本,报错,后来到官网找到一个较新的版本
cd imagick-3.4.3
/usr/local/php/bin/phpize        #必须的一步
./configure --with-php-config=/usr/local/php/bin/php-config
 make
 make install

    安装成功之后会在php目录下生成imagick.so的文件。

blob.png

5.配置PHP加速和缓存相关的拓展插件模块

    (1)配置Memcache/imagick模块生效

    要使刚刚安装的模块起效,我们需要编辑php的配置文件php.ini。执行vim /usr/local/php/lib/php.ini,查找"extension_dir",然后改为"

 extension_dir = "/usr/local/php5.6.31/lib/php/extensions/no-debug-non-zts-20131226/",接下来在文件的最后加入"

extension = memcache.so extension = imagick.so",配置文件的部分截图如下:

blob.png

blob.png

    验证php.ini文件,如果没问题,重启php-fpm服务,查看phpinfo()网页检查对应的插件

/usr/local/php/sbin/php-fpm -t        #出现successful字样才行
pkill php-fpm             #重启php-fpm服务
/usr/local/php/sbin/php-fpm

PHP服务缓存加速——xcache的安装与配置_第1张图片

PHP服务缓存加速——xcache的安装与配置_第2张图片

    (2)配置Xcache插件加速

    在软件的解压目录下/root/xcache-3.2.0,有个xcache.ini的配置文件,也就是XCache的配置文件。我们根据这个配置文件进行参数的调整之后,复制到php.ini文件的最后,部分的参数说明看备注

[xcache-common]
extension = xcache.so        ;加载xcache.so
[xcache.admin]
xcache.admin.enable_auth = On        ;开启认证
xcache.admin.user = "pcm"                                    ;这个自定义
xcache.admin.pass = "62b6d07a02edc7d58cb622def452e81b"        ;这个MD5是后面生成填写进去的
[xcache]
xcache.shm_scheme =        "mmap"    ;设置xcache如何从系统分配共享内存
xcache.size  =               256M    ;设置xcache缓存的大小值
xcache.count =                 1
xcache.slots =                8K
xcache.ttl   =                 86400        ;设定cache对象的生存期TTL,0为永不过期
xcache.gc_interval =           3600
xcache.var_size  =            64M
xcache.var_count =             1
xcache.var_slots =            8K
xcache.var_ttl   =             0
xcache.var_maxttl   =          0
xcache.var_gc_interval =     300
xcache.var_namespace_mode =    0
xcache.var_namespace =        ""
xcache.readonly_protection = Off
xcache.mmap_path =    "/dev/zero"
xcache.coredump_directory =   ""
xcache.coredump_type =         0
xcache.disable_on_crash =    Off
xcache.experimental =        Off
xcache.cacher =               On
xcache.stat   =               On
xcache.optimizer =           Off
[xcache.coverager]
xcache.coverager =           Off
xcache.coverager_autostart =  On
xcache.coveragedump_directory = ""

    添加完成之后我们检查Xcache加速情况的配置,下图可以看到Xcache的配置已经本引用了。

PHP服务缓存加速——xcache的安装与配置_第3张图片

    然后我们重启php-fpm进程,到phpinfo()页面检查是否起效

/usr/local/php/sbin/php-fpm -t        #出现successful字样才行
pkill php-fpm             #重启php-fpm服务
/usr/local/php/sbin/php-fpm

PHP服务缓存加速——xcache的安装与配置_第4张图片

    PS:MD5生成管理员密码的方法

[root@WEB-LNMP-01 ~]# echo -n "pcm123456" |md5sum 
62b6d07a02edc7d58cb622def452e81b  -            把密钥放到php.ini文件里面去

    (3)配置web界面,查看xcache缓存加速信息

    在xcache软件的解压目录下有管理xcache的站点目录,我们把它复制到blog虚拟主机上。操作如下

cp -a /root/xcache-3.2.0/htdocs/ /usr/local/nginx/html/blog/xadmin 
chown -R nginx:nginx /usr/local/nginx/html/blog/xadmin/
pkill php-fpm             #重启php-fpm服务
/usr/local/php/sbin/php-fpm

    浏览器然后打开xadmin页面,输入账号密码就会出现下面的页面。http://blog.pcm.com/xadmin/index.php

PHP服务缓存加速——xcache的安装与配置_第5张图片

6.PHP缓存加速的压力测试

    这些我们都做好了,总要知道做了这些配置之后我们的性能有了多少提升。下面我们用webbench工具来测试,webbench的安装和使用办法可以参考https://www.cnblogs.com/fjping0606/p/5852049.html,下面测试的结果

    (1)使用了缓存加速器的情况。并发数量为30,测试时间30秒

PHP服务缓存加速——xcache的安装与配置_第6张图片

    测试的时候,top的截图

PHP服务缓存加速——xcache的安装与配置_第7张图片

    (2)不使用加速器的情况,并发数量为30,测试时间30秒。

PHP服务缓存加速——xcache的安装与配置_第8张图片

    对应的top的情况

PHP服务缓存加速——xcache的安装与配置_第9张图片

    (3)可以看出,使用了xcache缓存加速器之后,访问php网页的性能提升了3倍左右。