(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 |
因为我们用的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的文件。
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的文件。
(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的文件。
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",配置文件的部分截图如下:
验证php.ini文件,如果没问题,重启php-fpm服务,查看phpinfo()网页检查对应的插件
/usr/local/php/sbin/php-fpm -t #出现successful字样才行 pkill php-fpm #重启php-fpm服务 /usr/local/php/sbin/php-fpm
(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-fpm进程,到phpinfo()页面检查是否起效
/usr/local/php/sbin/php-fpm -t #出现successful字样才行 pkill php-fpm #重启php-fpm服务 /usr/local/php/sbin/php-fpm
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
6.PHP缓存加速的压力测试
这些我们都做好了,总要知道做了这些配置之后我们的性能有了多少提升。下面我们用webbench工具来测试,webbench的安装和使用办法可以参考https://www.cnblogs.com/fjping0606/p/5852049.html,下面测试的结果
(1)使用了缓存加速器的情况。并发数量为30,测试时间30秒
测试的时候,top的截图
(2)不使用加速器的情况,并发数量为30,测试时间30秒。
对应的top的情况
(3)可以看出,使用了xcache缓存加速器之后,访问php网页的性能提升了3倍左右。
原文地址:http://blog.51cto.com/superpcm/2093866