PHP服务器缓存加速优化

PHP缓存加速器介绍

1.操作码介绍及缓存原理
  当客户请求PHP程序时,服务器的PHP引擎会解析PHP程序,并将其编译为特定的操作码(Oerate Code)简称Opcode文件,该文件是执行PHP代码后的一种二进制表示形式。默认情况下,这个操作码处理完PHP会把它丢弃。而缓存操作码就是要把这些操作码给保存下来,并放到共享库里,以便下次调用PHP重复调用。从而减轻服务器的压力(CPU和内存的开销)
2.PHP缓存加速软件介绍
  缓存加速软件就是缓存访问PHP引擎解析生成的操作码文件,在指定时间内相同的PHP程序请求时不再重复解析编译,而是直接调用缓存文件。提高WEB网站的服务的业务处理能力,从而提升用户访问整体体验。
LAMP环境PHP缓存加速器的原理
Apache环境的PHP缓存加速器原理:
在LAMP中,Apache服务是使用libphp5.so响应处理PHP程序请求的。整个流程大概如下:

  1)Apache接收客户的php程序请求,并根据规则过滤之、
  2)Apache将PHP程序请求传递给PHP处理模块libphp5.so
  3)PHP引擎定位磁盘上PHP文件,并将其加载内存中解析、
  4)PHP处理模块libphp5.so将PHP源码编译成OPcode
  5)PHP处理模块libphp5.so执行opcode然后把opcode缓存起来
  6)Apache接收客户端新的PHP程序请求,PHP引擎直接读取缓存文件opcode文件并将结果返回。在这次任务中,就无第4步 的编译解析了从而提升了PHP编译解析效率


LNMP环境PHP缓存加速器的原理详解
LNMP环境中,PHP引擎不在使用libphp5.so模块。而是启动了FCGI 即php-fpm进程,它监听来自nginx 的PHP程序请求、并交给PHP引擎解析处理整个执行的流程如下:

  1)nginx接收客户端的PHP访问请求
  2)nginx根据拓展名等过滤规则将PHP请求传递解析PHP的FCGI(php-fpm)进程
  3)PHP FPM进程调用PHP解析器读取站点磁盘上的PHP文件,并加载到内存中。
  4)PHP解析器将PHP程序编译成opcode文件然后在把opcode缓存起来。
  5)PHP FPM引擎执行opcode,返回数据给nginx进而在返回给客户、
  6)nginx接收客户新的PHP程序请求,PHP FPM引擎就会直接读取缓存编译opcode文件,将结果返回

LNMP环境中PHP请求及操作码的原理

PHP缓存加速软件的种类及选择建议
PHP缓存加速器软件常见的Xcache,eAccelerator APC(Alternative PHP Cache)ZendOpcache等
生产环境中选择其一即可。建议首要选择Xcache 其次 eAccelerator 如果想尝新可以选择ZendOpcache
ZendOpcache说明:
  zendopcache是PHP官方新一代缓存加速软件,以后的发展潜力可能会很好,目前PHP5.5以前的版本通过zendopcache软件一插件拓展方式安装,从PHP5.5版本开始整合到PHP软件里。编译时指定参数即可。例如: –enable-opcache
ZendOpcache可能未来是首选,但是目前稳定性有待测试,如果能忍受未知问题的话小规模环境可以尝试使用。
LNMP基础WEB环境说明
检查LNMP的软件版本
1)查看linxu内核几版本相关信息

[root@www ~]# cat /etc/redhat-release
CentOS release 6.6 (Final)
[root@www ~]# uname -r
2.6.32-504.e16.x86_64
[root@www ~]# uname -m
x86_64

2)查看Nginx Web版本相关信息。

[root@www ~]# /application/nginx/sbin/nginx -v
nginx version: nginx/1.6.3

3)查看PHP服务版本相关信息

[root@www ~]# /application/php/bin/php -v
PHP 5.3.27(cli) (build: Apr 22 2015 20:23:57)

4)查看MySQL服务版本相关信息

[root@www ~]# mysqladmin -uroot -poldboy123 version

LNMP环境拓展软件的部署说明:
1.LNMP缓存加速特别提示
  不管是Apahce还是Nginx 最后都是通过PHP提供动态程序解析的,因此,不管是Apache的libphp5.so模块方式,还是nginx的FCGI的PHP服务方式,最终在PHP引擎上的优化是一致的。都是基于PHP服务(php.ini)
2.解决部分加速软件的Perl编译问题
1)配置环境变量LC_ALL
配置环境变量LC_ALL的过程如下:
[root@www ~]# echo ‘export LC_ALL=C’>>/etc/profile #设置环境变量,解决后面Perl程序插件的编译问题,符号“>>”表示向文件追加内容

[root@www ~]# tail -1 /etc/profile  #查看是否正确加了 export LC_ALL=C 环境配置
export LC_ALL=C
[root@www ~]# source /etc/profile #使增加环境配置生效
[root@www ~]# echo $LC_ALL
C #查看生效结果

2)安装Perl相关软件依赖
需要前提安装Perl相关软件依赖软件包 执行yum -y install perl-CPAN 或者yum -y install perl-devel 任意一个即可,大约依赖17个包,提前解决后面软件安装可能遇到的问题,如果安装后续安装ImageMagick时可能会报错。
安装PHP缓存加速器的拓展
安装PHP eAccelerator缓存加速模块
  eAccelerator是一个免费的,开放源代码的PHP加速,优化及缓存的拓展插件软件,它可以缓存PHP程序编译后的中间代码文件(opcode)session数据等,降低PHP程序在编译解析时对服务器性能开销。加速PHP文件执行的速度。使PHP程序代码执行效率提高1~10倍
eAccelerator加速器的特点:
1.eAccelerator默认是把PHP编译的文件放在内存缓存,也可以设置内存和硬盘同时缓存
2.eAccelerator 生于2004年前生Turck MMCache, 成熟稳定,值得信赖的加速器软件,但目前代码社区不太活跃。
3.eAccelerator最新版本0.9.6.1 支持的PHP版本为5.3 及以前5系列的版本
eAccelerator最新版本0.9.6.1 https://github.com/eaccelerator/eaccelerator/downloads
eAccelerator安装过程:

cd /home/oldboy/tools/
wget https://cloud.github.com/downloads/eaccelerator/eaccelerator/eaccelerator-0.9.6.1.tar.bz2
tar xf eaccelerator-0.9.6.1.tar.bz2
cd eaccelerator-0.0.6.1
/application/php/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=/application/php/bin/php-config
#configure的参数路径要正确,特别是后面的 --with-php-config参数对应的PHP安装目录地址,几乎所有PHP拓展都要指定这个参数
make
make install
cd ../
ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

注意事项及说明:

PHP 5.3.XX可用eaccelerator-0.9.6版本,如果使用0.9.5.2版本在make阶段会报错,make: ***[optimize.lo]Error 1
PHP 5.2.XX 可用 eaccelerator-0.9.5.2版本
出现Cannot find config.m4错误,需要切换到eaccelerator路径下执行/application/php/bin/phpize

安装PHP Xcache 缓存加速软件模块
Xcache缓存加速插件说明
Xcache 是一个开源,又快有稳定的PHP opcode缓存器/优化器 其项目leader增是 lighttpd(nginx类似的web服务软件)开发成员之一。
Xcache 把PHP程序编译后的数据(opcode)缓存到共享内存里,避免相同相同编译,用户请求PHP程序时,可以直接使用缓存以编译好的数据,从而提高PHP的访问速度。通常可以提升2-5倍、并大幅度降低服务器负载开销。
当前稳定版本3.1x (全面支持 php5.1-5.6)
具体安装命令集合如下:

cd /home/oldboy/tools/
wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.bz2
tar xf xcache-3.2.0.tar.bz2
cd xcache-3.2.0
/application/php/bin/phpize
./configure --enable-xcache --with-php-config=/application/php/bin/php-config
make
make install
ls -l /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/
cd ..

PHP官方加速插件ZendOpcache
1.Zendopcache插件说明
  PHP 5.5以上的版本支持Zendopcache很简单,只需要在编译时加上 –enable-opcache就行了。PHP5.5之前的版本Zendopcache也有独立的软件,并支持php5.2 php5.3 php5.4
下面我们来示例PHP5.3版本安装zendopcache-7.0.5.tgz
官方下载地址:http://pecl.php.net/package/ZendOpcache
2.ZendOpcache插件安装过程
这里安装以zendopcache-7.0.5.tgz为例
具体安装命令集合如下:

cd /home/oldboy/tools/
wget -q http://pecl.php.net/get/zendopcache-7.0.5.tgz
tar xf zendopcache-7.0.5.tgz
cd zendopcache-7.0.5
/application/php/bin/phpize
./configure --enable-opcache --with-php-config=/application/php/bin/php-config
make
make install
ls -l /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/
cd ..

3.安装数据库缓存及其他PHP拓展插件
安装PHP Memcached拓展插件
1)Memcached 是一个开源的,支持高性能、高并发分布式的内存缓存服务软件;Memcached诞生于2003年,分为服务器端和客户端两部分。其中,服务器软件的名字形如Memcached-1.4.13.tar.gz客户端软件的名字形如Memcache-2.27tar.gz
生产场景的Memcachedf服务一般被用来保存网站中经常被读取的对象或者数据。就像我们的客户端把游览器的网页缓存起来一样,通过内存缓存对象或者数据要比磁盘存取快很多,因为磁盘是机械的介质,因此在当今的IT企业中Memcached的应用广泛。
Memcached缓存原理:
1)程序首先检查客户端请求的数据在Memcached服务的缓存中否存在,如果存在,直接吧请求的数据返回,不在请求后端数据库。
2)如果请求的数据在Memcached缓存中不存在,则程序会去Memcached后端数据库服务
3)把从数据库中取到的数据返回给客户端
4)同时把新取到的数据缓存一份到Memcached服务缓存中,下次同样的请求就直接从Memcached服务缓存返回数据。从而减轻数据库的访问压力。
Memcached缓存PHP拓展插件安装
Memcached客户端PHP的拓展插件(memcache-2.2.7.tgz)在PHP环境中安装,用于访问Memcached服务器数据。
PHP memcached拓展插件下载地址为:http://pecl.php.net/package/memcache

cd /home/oldboy/tools/
wget -q http://pecl.php.net/get/memcache-2.2.7.tgz
tar xf memcache-2.2.7.tgz
cd memcache-2.2.7
/application/php/bin/phpize
./configure --enable-memcache --with-php-config=/application/php/bin/php-config
make
make install
cd ../

安装PDO_MYSQL拓展模块
1.PDO_MYSQL拓展模块说明
PDO拓展为PHP访问数据库定义的一个轻量级一致性的接口,它提供数据访问抽象层,这样无论什么样的数据库,都可以通过一致的函数执行查询并获取数据。
PDO_MYSQL拓展插件下载地址为:http://pecl.php.net/PDO_MYSQL-1.0.2.tgz
2.PDO_MYSQL的安装方法
1)通过插件安装
2)另一种编译PHP时 –with-pdo-mysql=mysqlnd 安装
完成安装PDO_MYSQL的命令集合如下:

cd /home/oldboy/tools
wget -q http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz
tar xf PDO_MYSQL-1.0.2.tgz
cd PDO_MYSQL-1.0.2/
/application/php/bin/phpize
./configure --with-php-config=/application/php/bin/php-config --with-pdo-mysql=/application/mysql
#configure参数的路径要正确配置,/application/mysql为MYSQL的安装路径,要首先安装好Mysql
make
make install
ls /application/php5.3.27/lib/php/extensions/no-debug-zts-20090626/

安装其他的PHP拓展插件模块
安装图像处理程序及imagick拓展模块
安装imageMagick图像软件
imageMagick是一套功能强大,稳定而且免费的工具集的开发包,用来读取和写处理超过89中基本的格式的图像文件,包括流行的tiff gif png pdf以及PhotoCD等;
imagemagick常见功能如下:

  将图片从一个格式转换成另一个格式,包括直接转换成图标
  可以改变图片的尺寸,旋转,锐化、减少设置图片特效。
  对图片设置各种尺寸缩略图
  将图片设置成可以适应于web背景的透明图片
  将一组图片做成gif动画,直接convert
  将几张图片做成一张组合图片
  在一个图形上写字或者画图图形,带文件阴影和边框渲染
  给图片加边框或者框架
  取得一些图片的特性信息

安装ImageMagick命令如下:

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

#提示图像软件make时间较长。
ImageMagick安装报错几解决方法
示例如下1:
Can't locate ExtUtils/MakeMaker.pm
解决方案: yum install perl-devel -y
示例如下2:
寻找唯一并且有特征的错误提示去搜索如下:
[PerlMagick/Makefile] Error 2
解决方案: make -k -i install 或者 yum -y install perl-CPAN
安装imagegick PHP拓展插件
imagegick插件工作需要ImageMagick软件的支持,所以必须先安装ImageMagick否则会报错。
imagick插件是一个可以供PHP调用ImageMagick功能的拓展模块,使用这个模块使PHP 具备和ImageMagick相同的功能。
安装命令如下:

tar zxf imagick-2.3.0.tgz
cd imagegick-2.3.0
/application --with-php-config=/application/php/bin/php-config
#configure参数路径要正确配置
make
make install
ls /application/php5.3.27/lib/php/extensions/no-debug-zts-20090626

检查所有PHP拓展插件模块安装的成果
ls -l /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626
其中,eaccelerator.so opcache.so xcache.so 属于同类软件,生产环境中安装其中一种即可。否则,可能会引起冲突;另外,pdo_mysql.so imagick.so属于功能软件,可选安装;memcache.so 是数据库缓存软件,可选安装。
提示:
后续的安装配置以及优化关注后续文章

发表评论

发表评论

*

沙发空缺中,还不快抢~