LNMP 优化之 PHP 缓存加速优化

1. PHP 缓存加速器介绍

1.1 操作码介绍及缓存原理

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

1.2 PHP 缓存加速软件介绍

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

1.3 LNMP 环境 PHP 缓存加速器的原理详解

在 LNMP 环境中,PHP 引擎启动独立的 FCGI 即 php-fpm 进程,由它监听来自 Nginx 的 PHP 程序请求,并交给 PHP 引擎解析处理,整个执行流程大概如下:

① Nginx 接收客户端的 PHP 程序访问请求。

② Nginx 根据扩展名等过滤规则将 PHP 程序请求传递给解析 PHP 的 FCGI(php-fpm)进程。

③ php-fpm 进程调用 PHP 解析器读取站点磁盘上的 PHP 文件,并加载到内存中。

④ PHP 解析器将 PHP 程序编译成为 Opcode 文件,然后把 Opcode 缓存起来。

⑤ php-fpm 引擎执行 Opcode 后,返回数据给 Nginx,进而返回给客户端。

⑥ Nginx 接收客户新的 PHP 程序请求,php-fpm 引擎就会直接读取缓存中的 Opcode 并执行,将结果返回。该过程无需第 4 步操作,从而提升了 PHP 编译解析效率。

1.4 PHP 缓存加速器软件种类及选择建议

        PHP 缓存加速器软件常见的种类有 XCache、eAccelerator、ZendOpcache、APC(Alternative PHP Cache)等。根据企业的业务需求及选择前的压力测试结果或根据个人的经验偏好选择。建议首选 XCache,其次是 eAccelerator ,任选其一即可。

1.4.1 首选 XCache 的原因如下

① 经过测试,XCache 效率更高、速度更快;

② XCache 软件开发社区更活跃;

③ 支持更高版本的 PHP 。

1.4.2 次选 eAccelerator 的原因如下

① 安装及配置参数更简单,加速效果也不错;

② 资料较多,但软件更新慢,社区不灵活;

③ 仅适合 PHP 版本 5.4 以下的程序。

1.4.3 选择 ZendOpcache 的原因如下

① 是 PHP 官方研发的新一代缓存加速软件,以后的发展潜力可能会很好。PHP 5.5 以前的版本可以通过 ZendOpcache 软件以插件扩展的方式安装,从 PHP 5.5 版本开始已经整合到 PHP 软件里了,编译时只需指定一个参数即可,例如:--enable-opcache;

② ZendOpcache 可能是未来的缓存加速首选,现在的稳定性还有待检查,小规模环境下 PHP 5 以前的版本可以通过插件方式安装使用,PHP 5 以上的版本可以直接指定参数编译使用。

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

2.1 确保 LNMP 环境完整

[root@lnmp02 blog]# lsof -i :80

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

nginx   1795  root    8u  IPv4  12472      0t0  TCP *:http (LISTEN)

nginx   1796 nginx    8u  IPv4  12472      0t0  TCP *:http (LISTEN)

[root@lnmp02 blog]# lsof -i :9000

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

php-fpm 1799  root    7u  IPv4  12492      0t0  TCP localhost:cslistener (LISTEN)

php-fpm 1800 nginx    0u  IPv4  12492      0t0  TCP localhost:cslistener (LISTEN)

php-fpm 1801 nginx    0u  IPv4  12492      0t0  TCP localhost:cslistener (LISTEN)

[root@lnmp02 blog]# pwd

/application/nginx/html/blog

[root@lnmp02 blog]# cd /application/nginx/html/blog

[root@lnmp02 blog]# vim phpinfo.php

<?php

phpinfo();

?>

 

2.2 有关 LNMP 环境扩展软件的部署说明

2.2.1 LNMP 缓存加速特别提示

无论是 Apache 还是 Nginx ,最后都是通过 PHP 提供动态程序解析的。因此不管是 Apache 的 libphp5.so 模块方式,还是 Nginx 的 FCGI 的 PHP 服务方式,最终在 PHP 引擎上的优化是一致的。

2.2.2 解决部分加速软件的 Perl 编译问题

在下面各类软件的安装编译过程中,如果不解决 Perl 的一些环境问题可能会带来意想不到的安装错误或警告。

① 配置环境变量 LC_ALL

[root@lnmp01 ~]# echo 'export LC_ALL=C'>>/etc/profile     

# 设置环境变量,解决后面 Perl 程序插件的编译问题。

[root@lnmp01 ~]# tail -1 /etc/profile    

export LC_ALL=C

[root@lnmp01 ~]# source /etc/profile

[root@lnmp01 ~]# echo $LC_ALL

C   

② 安装 Perl 相关软件依赖(以下两行命令任意一个即可)

yum install perl-CPAN -y

yum install perl-devel -y

3. 安装 PHP 缓存加速器

安装 PHP eAccelerator 缓存加速模块:

        eAccelerator 缓存加速插件说明:

        eAccelerator 是一个免费的、开源的 PHP 加速、优化及缓存的扩展插件软件,它可以缓存 PHP 程序编译后的中间代码文件(opcode)、session 数据等,降低 PHP 程序在编译解析时对服务器的性能开销。eAccelerator 还可以加快 PHP 程序的执行速度,降低服务器负载压力,使 PHP 程序代码执行效率提高 1~10 倍。

        eAccelerator 会把编译好的 PHP 程序存放在共享内存里,然后每次从内存里调用执行,可以设定把一些不合适放在内存里缓存的编译结果存储到磁盘上,默认情况下,磁盘和内存缓存都会被eAccelerator 使用。

        eAccelerator 最新版的下载地址为:https://github.com/eaccelerator/eaccelerator/downloads

        eAccelerator 插件安装过程:

        具体的安装命令如下:

cd /home/oldboy/tools/

wget https://github.com/downloads/eaccelerator/eaccelerator/eaccelerator-0.9.6.tar.bz2

tar xf eaccelerator-0.9.6.tar.bz2

cd eaccelerator-0.9.6

/application/php/bin/phpize

./configure --enable-eaccelerator=shared --with-php-config=/application/php/bin/php-config

make

make install

cd ../

ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

        安装操作详细过程如下:

[root@lnmp01 tools]# cd /home/oldboy/tools/

[root@lnmp01 tools]# tar xf eaccelerator-0.9.6.tar.bz2

[root@lnmp01 tools]# cd eaccelerator-0.9.6

[root@lnmp01 eaccelerator-0.9.6]# /application/php/bin/phpize

[root@lnmp01 eaccelerator-0.9.6]# ./configure --enable-eaccelerator=shared --with-php-config=/application/php/bin/php-config

[root@lnmp01 eaccelerator-0.9.6]# make

[root@lnmp01 eaccelerator-0.9.6]# make install

[root@lnmp01 eaccelerator-0.9.6]# ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

eaccelerator.so

[root@lnmp01 eaccelerator-0.9.6]# cd ../

提示:最后生成的 eaccelerator.so 模块就表示 eaccelerator 安装成功。

安装 PHP XCache 缓存加速模块:

        XCache 缓存加速插件说明:

        XCache 是一个开源、又快又稳定的 PHP opcode 缓存器、优化器。XCache 把 PHP 程序编译后的数据(opcode)缓存到共享内存里,避免相同的程序重复编译。用户请求相同的 PHP 程序时,可以直接使用缓存中编译好的数据,从而提高 PHP 的访问速度,通常可以提升 2~5 倍,并大幅降低服务器负载开销。

        XCache 插件的安装过程:

        具体的安装命令集如下:

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 /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

cd ../

        安装操作详细过程如下:  

[root@lnmp02 oldboy]# cd /home/oldboy/tools/

[root@lnmp02 tools]# wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.bz2

[root@lnmp02 tools]# ls xcache-3.2.0.tar.bz2

xcache-3.2.0.tar.bz2

[root@lnmp02 tools]# tar xf xcache-3.2.0.tar.bz2

[root@lnmp02 tools]# cd xcache-3.2.0

[root@lnmp02 xcache-3.2.0]# /application/php/bin/phpize

[root@lnmp02 xcache-3.2.0]# ./configure --enable-xcache --with-phpconfig=/application/php/bin/php-config

[root@lnmp02 xcache-3.2.0]# make

[root@lnmp02 xcache-3.2.0]# make install

[root@lnmp02 xcache-3.2.0]# ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

eaccelerator.so  xcache.so

[root@lnmp02 xcache-3.2.0]# cd ../

提示:最后生成的 xcache..so 模块就表示 xcache 安装成功。

安装 PHP ZendOpcache 官方加速插件:

        ZendOpcache 插件说明:                    

        从 PHP 5.5 开始,官方已经集成了新一代的缓存加速软件,其名字为 ZendOpcache,功能和上面的两种相似但又有少许不同。据官方说,ZendOpcache 缓存速度更快。

        这几个 PHP 加速插件的主要原理基本相同,就是把 PHP 执行后的数据缓存到内存中从而避免重复的编译过程,使其能够直接使用缓存中已编译的代码,从而提高速度,降低服务器负载。他们的效率是显而易见的,一些大型的 CMS ,每次打开一个页面要调用数十个 PHP 文件,执行数万行代码,效率可想而知,安装上述加速器后,打开页面的速度明显加快。

        PHP 5.5 以上版本,支持 ZendOpcache 很简单,只需在编译 PHP 5.5 时加上 --enable-opcache就行了。在 PHP 5.5 版本以前,ZendOpcache 也有独立的软件,并且也支持低版本的 PHP 5.2.*、PHP 5.3.*、PHP5.4.*。下面以 PHP 5.3 版本为例讲解 ZendOpcache 软件,以 PHP 扩展插件的方式介绍安装步骤。

        官方下载地址为:http://pecl.php.net/package/ZendOpcache。

        ZendOpcache 插件安装过程:

        由于前面 LNMP 环境使用的是 PHP 5.3 版本,所以需要以 PHP 扩展插件的方式安装,不能使用 PHP 编译直接加参数( --enable-opcache)的方式安装(PHP 5.5 以上才可以)。

        具体的安装命令集如下:

        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 /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

        cd ../

        安装操作详细过程如下:

[root@lnmp01 tools]#  cd /home/oldboy/tools

[root@lnmp01 tools]#  wget -q http://pecl.php.net/get/zendopcache-7.0.5.tgz

[root@lnmp01 tools]#  tar xf zendopcache-7.0.5.tgz

[root@lnmp01 tools]#  cd zendopcache-7.0.5

[root@lnmp01 zendopcache-7.0.5]#  /application/php/bin/phpize

[root@lnmp01 zendopcache-7.0.5]#  ./configure --enable-opcache --with-config=php-/application/php/bin/php-config

[root@lnmp01 zendopcache-7.0.5]#  make

[root@lnmp01 zendopcache-7.0.5]#  make install

[root@lnmp01 zendopcache-7.0.5]#  ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

eaccelerator.so  opcache.so  xcache.so

提示:最后生成的 opcache.so 模块就表示 opcache 安装成功。

安装数据库缓存及其他 PHP 扩展插件:         

安装 PHP Memcached 扩展插件:

        Memcached 缓存软件说明:

        Memcached 是一个开源的、支持高性能、高并发及分布式的内存缓存服务软件。Memcached 服务分为服务器端和客户端两部分,期中服务器端软件的名字形如 Memcached-1.4.13.tar.gz,客户端软件的名字形如 Memcache-2.27.tar.gz。Memcached是高性能的分布式内存缓存服务。使用Memcached 的主要目的是,通过在自身内存中缓存数据库的查询结果,减少数据库访问次数,以提高动态 Web 应用的速度,提高网站架构的并发能力和扩展性。

        Memcached 服务通过在事先规划好的系统内存空间中临时缓存数据库中的各类数据,以达到减少前端业务对数据库的直接高并发访问,从而提升大规模网站集群中动态服务的并发访问能力。

        生产场景的 Memcached 服务一般被用来保存网站中经常被读取的对象或数据,就像我们的客户端浏览器把经常访问的网页缓存起来一样,通过内存缓存来存取对象或数据要比磁盘存取快很多,因为磁盘是机械的介质。因此,在当今的 IT 企业中,Memcached 的应用范围很广。

        Memcached 服务的工作步骤如下:

        ① 程序首先检查客户端请求的数据在 Memcached 服务的缓存中是否存在。如果存在,直接把请求的数据返回,不再请求数据库;

        ② 如果请求的数据在 Memcached 缓存中不存在,则程序会去 Memcached 后端的数据库服务;

        ③ 把从数据库中取到的数据返回给客户端;

        ④ 同时把新取到的数据库的数据缓存一份到 Memcached 服务缓存中,下次同样的请求就直接从 Memcached 服务缓存返回数据,从而减轻数据库的访问压力。

        Memcached 缓存 PHP 扩展插件安装:

        Memcached 分为服务器端软件和客户端软件两部分,本文是 Memcached 客户端 PHP 的扩展插件(Memcache-2.2.7.tgz)在 PHP 环境中的安装,用于访问 Memcached 服务器端数据。

        PHP 的Memcache 扩展插件下载地址为:http://pecl.php.net/package/Memcache 。

        具体的安装命令集如下:( 提前下载安装包 )

        cd /home/oldboy/tools

        tar zxf memcache-2.2.5.tgz

        cd memcache-2.2.5

        /application/php/bin/phpize

        ./configure --enable-memcache --with-php-config=/application/php/bin/php-config

        make

        make install

        ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

        cd ../

        安装操作详细过程如下:

[root@lnmp01 oldboy]# cd /home/oldboy/tools

[root@lnmp01 tools]# ls memcache-2.2.5.tgz

memcache-2.2.5.tgz

[root@lnmp01 tools]# tar zxf memcache-2.2.5.tgz

[root@lnmp01 tools]# cd memcache-2.2.5

[root@lnmp01 memcache-2.2.5]#  /application/php/bin/phpize

[root@lnmp01 memcache-2.2.5]# ./configure --enable-memcache --with-php-config=/application/php/bin/php-config

[root@lnmp01 memcache-2.2.5]# make

[root@lnmp01 memcache-2.2.5]# make install

[root@lnmp01 memcache-2.2.5]# ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

eaccelerator.so  memcache.so  opcache.so  xcache.so

提示:最后生成的 memcache.so 模块就表示 memcache 安装成功。

安装 PDO_MYSQL 扩展模块:

        PDO_MYSQL 扩展插件说明:

        PDO 扩展为 PHP 访问数据库定义了一个轻量级一致性的接口,它提供了一个数据访问抽象层。这样无论使用的是什么数据库,都可以通过一致性的函数执行查询并获取数据。

        PDO_MYSQL 扩展插件的安装过程:

        PDO_MYSQL 的安装有两种方法,一种是插件方式安装,另一种是编译 PHP 时加入PDO_MYSQL 支持,直接指定 PHP 的对应 PDO_MYSQL 编译参数安装,例如:--with-pdo-mysql

=mysqlnd 。

        同时,PHP 环境也可以不安装 MySQL 软件,直接指定参数 --with-mysql=mysqlnd 即可让 PHP 支持连接 MySQL 数据库。

        具体的安装命令集如下:( 提前下载安装包 )

cd /home/oldboy/tools

ls 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

make

make install

ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

cd ../

        安装操作详细过程如下:

[root@lnmp01 tools]# cd /home/oldboy/tools/

[root@lnmp01 tools]# ls PDO_MYSQL-1.0.2.tgz

PDO_MYSQL-1.0.2.tgz

[root@lnmp01 tools]# tar xf PDO_MYSQL-1.0.2.tgz

[root@lnmp01 tools]# cd PDO_MYSQL-1.0.2

[root@lnmp01 PDO_MYSQL-1.0.2]#  /application/php/bin/phpize

[root@lnmp01 PDO_MYSQL-1.0.2]# ./configure --with-php-config=/application/php/bin/php-config --with-pdo-mysql=/application/mysql        

[root@lnmp01 PDO_MYSQL-1.0.2]# make   

[root@lnmp01 PDO_MYSQL-1.0.2]# make install

[root@lnmp01 PDO_MYSQL-1.0.2]# ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

eaccelerator.so  memcache.so  opcache.so  pdo_mysql.so  xcache.so

提示:生成模块 pdo_mysql.so 表示PDO_MYSQL 扩展插件安装成功。

安装图像处理程序及 imagick 扩展模块:

        安装 ImageMagick 图像软件:

        ImageMagick 是一套功能强大、稳定且免费的工具包和开发包,可以用来读、写和处理超过 89 种基本格式的图片文件,包括流行的 tiff、jpeg、gif、png、pdf 以及 PhotoCD 等。利用 ImageMagick 可以根据 Web 应用程序的需要动态生成图片,还可以对一个(或一组)图片进行改变大小、旋转、锐化、减色或增加特效等操作,并将操作的结果以相同格式或其他格式保存。对图片的操作,既可以通过命令行进行,也可以用C/C++

Perl、Java、PHP、Python 或 Ruby 编程来完成。同时 ImageMagick 提供了一个高质量的 2D 工具包,部分支持 SVG。现在,ImageMagick 的主要精力集中在加强性能、减少 bug 以及提供稳定的 API 和 ABI 上。

        ImageMagick 的常见功能如下:

        ① 将图片从一个格式转化成另一个格式,包括直接转化成图标;

        ② 可以改变图片尺寸,旋转、锐化(sharpen)、减色、设置图片特效;

        ③ 对图片设置各种尺寸缩略图;

        ④ 将图片设置为可以适用于 Web 背景的透明图片;

        ⑤ 将一组图片做成 gif 动画,直接 convert ;

        ⑥ 将几张图片做成一张组合图片;

        ⑦ 在一个图片上写字或画图形,带文字阴影和边框渲染;

        ⑧ 给图片加边框或框架;

        ⑨ 取得一些图片的特性信息。

        ImageMagick 几乎包括了 gimp 可以实现的所有常规插件功能,甚至包括各种曲线参数的渲染功能。下载地址为:http://download.chinaunix.net/download/0001000/95.shtml,需要提前下载好。

        具体的安装命令集如下:( 提前下载安装包 )

cd /home/oldboy/tools

ls -l ImageMagick.tar.gz

tar xf ImageMagick.tar.gz

cd ImageMagick-6.5.1-2

./configure

make && make install

cd  ../

提示:① 此图像软件安装时 make 步骤耗时较长;

          ② 该软件不是安装 PHP 的扩展,因此没有生成 .so 的模块文件。

        安装操作详细过程如下:

[root@lnmp01 tools]# cd /home/oldboy/tools/

[root@lnmp01 tools]# ls -l ImageMagick.tar.gz

[root@lnmp01 tools]# tar xf ImageMagick.tar.gz

[root@lnmp01 tools]# cd ImageMagick-6.5.1-2

[root@lnmp01 ImageMagick-6.5.1-2 ]# ./configure

[root@lnmp01 ImageMagick-6.5.1-2 ]# make && make install

[root@lnmp01 ImageMagick-6.5.1-2 ]# cd  ../

提示:关于 ImageMagick 的安装报错及解决方法见《 Web 集群实战 P258 》。

        安装 imagick PHP 扩展插件:

        imagick 插件工作需要 ImageMagick 软件的支持,所以必须要安装 ImageMagick ,否则会报错。

        imagick 插件是一个可以供 PHP 调用 ImageMagick 功能的扩展模块。使用这个扩展可以使 PHP 具备和 ImageMagick 相同的功能。

        安装了  ImageMagick 图像程序后,再安装 PHP  的扩展 imagick 插件,才能使用  ImageMagick 提供的 API 进行图片的创建与修改、压缩等操作,因为它们都集成在 imagick 这个 PHP 扩展中。

        具体的安装命令集如下:( 提前下载安装包 )

        cd /home/oldboy/tools

        ls -l imagick-2.3.0.tgz         

        tar zxf imagick-2.3.0.tgz

        cd imagick-2.3.0

        /application/php/bin/phpize

       ./configure --with-php-config=/application/php/bin/php-config

        make && make install

        ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

        cd ../

        安装操作详细过程如下:

[root@lnmp01 tools]# cd /home/oldboy/tools

[root@lnmp01 tools]# ls -l imagick-2.3.0.tgz         

[root@lnmp01 tools]# tar zxf imagick-2.3.0.tgz

[root@lnmp01 tools]# cd imagick-2.3.0

[root@lnmp01 imagick-2.3.0]# /application/php/bin/phpize

[root@lnmp01 imagick-2.3.0]# ./configure --with-php-config=/application/php/bin/php-config

[root@lnmp01 imagick-2.3.0]# make

[root@lnmp01 imagick-2.3.0]# make install

[root@lnmp01 imagick-2.3.0]# ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

eaccelerator.so  imagick.so  memcache.so  opcache.so  pdo_mysql.so  xcache.so

提示:生成  imagick.so 模块表示 imagick 插件 安装成功。

        检查所有 PHP 扩展插件模块安装的成果:

[root@lnmp01 tools]# ls -l /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

total 2984

-rwxr-xr-x 1 root root  416797 Mar 19 12:11  eaccelerator.so

-rwxr-xr-x 1 root root 1070977 Mar 20 08:40 imagick.so

-rwxr-xr-x 1 root root  246672 Mar 19 14:12  memcache.so

-rwxr-xr-x 1 root root  491814 Mar 19 13:12  opcache.so

-rwxr-xr-x 1 root root  156004 Mar 19 14:35  pdo_mysql.so

-rwxr-xr-x 1 root root  658468 Mar 19 12:35  xcache.so

        当前一共有 6 个常用扩展模块,其中 eaccelerator、opcache、xcache 属于同类软件,生产环境中只需安装一种即可,否则会产生使用冲突。

配置 PHP 加速与缓存相关的扩展插件模块:

配置 Memcache/PDO_MYSQL/imagick 模块生效:

        修改 PHP 的配置文件 /application/php/lib/php.ini :

        ① 执行 vi  /application/php/lib/php.ini 命令,编辑查找该配置文件的 extension_dir = "./ " 参数,修改为 extension_dir = "/application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/",这个参数对应的路径就是前文编译的模块所在的路径。

        详细的操作过程如下:  (操作前要备份该配置文件)

[root@lnmp01 tools]# cd /application/php/lib  

[root@lnmp01 lib]# vi  /application/php/lib/php.ini     

[root@lnmp01 lib]# grep "extension_dir = " php.ini

extension_dir = "/application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/"

        ② 在 vim 命令模式下按 Shift + G 键跳到文件结尾增加如下几行,然后保存:

        ;--cache ext start by Zhang Lei 2018-3-28--

        extension = memcache.so

        extension = pdo_mysql.so

        extension = imagick.

        ;--cache ext end by Zhang Lei 2018-3-28--

        详细的操作过程如下:

[root@lnmp01 lib]# vi  /application/php/lib/php.ini

[root@lnmp01 lib]# tail -5 php.ini     

;--cache ext start by Zhang Lei 2018-3-28--

extension = memcache.so

extension = pdo_mysql.so

extension = imagick.so

;--cache ext end by Zhang Lei 2018-3-28--

检查配置的相关模块生效情况:

        重启 PHP 服务,编写测试程序 phpinfo:

[root@lnmp01 lib]# pkill php-fpm

[root@lnmp01 lib]# ps -ef|grep php-fpm|grep -v grep

[root@lnmp01 lib]# /application/php/sbin/php-fpm         

[root@lnmp01 blog]# ps -ef|grep php-fpm|grep -v grep|wc -l

3

[root@lnmp01 conf]# cd /application/nginx/html/blog/

[root@lnmp01 blog]# vi test.php

[root@lnmp01 blog]# cat /application/nginx/html/blog/test.php

<?php phpinfo();

?>

        检查 Memcache 扩展插件:

        配置好客户端的 hosts 解析,然后在浏览器输入 www.etiantian.org/test.php 页面的地址,出现的内容如图所示:

 

        通过快捷键 Ctrl + F 进行页面搜索,如下图所示,表示 Memcached 插件已生效:

 

        检查 PDO_MYSQL 扩展插件,如图所示:

 

        检查 Imagick 扩展插件,如图所示:

 

        到此为止,pdo_mysql.so、imagick.so、memcache.so 三个 PHP 的扩展模块就全部安装及配置完毕。

配置 eAcclerator 插件生效并优化参数:

        配置 eAcclerator 缓存目录:

[root@lnmp01 lib]# cd /application/php/lib/  

[root@lnmp01 lib]# mkdir -p /tmp/eaccelerator     

# 此目录可以用 tmpfs 内存文件系统或 SSD 固态硬盘来存储。

[root@lnmp01 lib]# chown -R nginx.nginx /tmp/eaccelerator

[root@lnmp01 lib]# ls -ld /tmp/eaccelerator

drwxr-xr-x 2 nginx nginx 4096 Mar 20 11:36 /tmp/eaccelerator

        配置 eAcclerator 参数,命令如下:

cat   >>   /application/php/lib/php.ini<<EOF

[eaccelerator]

extension=eaccelerator.so

eaccelerator.shm_size="64"

eaccelerator.cache_dir="/tmp/eaccelerator"

eaccelerator.enable="1"

eaccelerator.optimizer="1"

eaccelerator.check_mtime="1"

eaccelerator.debug="0"

eaccelerator.filter=""

eaccelerator.shm_max="0"

eaccelerator.shm_ttl="3600"

eaccelerator.shm_prune_period="3600"

eaccelerator.shm_only="0"

eaccelerator.compress="1"

eaccelerator.compress_level="9"

EOF

[root@lnmp01 lib]# tail -15 php.ini      # 检查操作后的配置结果。

[eaccelerator]

extension=eaccelerator.so

eaccelerator.shm_size="64"

eaccelerator.cache_dir="/tmp/eaccelerator"

eaccelerator.enable="1"

eaccelerator.optimizer="1"

eaccelerator.check_mtime="1"

eaccelerator.debug="0"

eaccelerator.filter=""

eaccelerator.shm_max="0"

eaccelerator.shm_ttl="3600"

eaccelerator.shm_prune_period="3600"

eaccelerator.shm_only="0"

eaccelerator.compress="1"

eaccelerator.compress_level="9"

提示:关于 eAcclerator 配置参数的详细说明见<< Web集群实战 P266 >>

        检查 eAcclerator 加速配置情况:

[root@lnmp01 lib]# /application/php/bin/ph

phar        phar.phar   php         php-config  phpize      

[root@lnmp01 lib]# /application/php/bin/php -v

PHP 5.3.27 (cli) (built: Dec 23 2017 16:24:25)

Copyright (c) 1997-2013 The PHP Group

Zend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies

    with eAccelerator v0.9.6, Copyright (c) 2004-2010 eAccelerator, by eAccelerator        

        重启 PHP 服务:

[root@lnmp01 lib]# pkill php-fpm

[root@lnmp01 lib]# ps -ef|grep php-fpm|grep -v grep

[root@lnmp01 lib]# /application/php/sbin/php-fpm

[root@lnmp01 lib]# ps -ef|grep php-fpm|grep -v grep|wc -l

3

        通过 phpinfo 检查 eAcclerator 插件结果,如图所示:

 

        此时查看缓存目录 /tmp/eaccelerator,结果如下:

[root@lnmp01 lib]# ls -l /tmp/eaccelerator

total 64

drwxrwxrwx 18 root root 4096 Mar 20 11:59 0

drwxrwxrwx 18 root root 4096 Mar 20 11:59 1

drwxrwxrwx 18 root root 4096 Mar 20 11:59 2

drwxrwxrwx 18 root root 4096 Mar 20 11:59 3

drwxrwxrwx 18 root root 4096 Mar 20 11:59 4

drwxrwxrwx 18 root root 4096 Mar 20 11:59 5

drwxrwxrwx 18 root root 4096 Mar 20 11:59 6

drwxrwxrwx 18 root root 4096 Mar 20 11:59 7

drwxrwxrwx 18 root root 4096 Mar 20 11:59 8

drwxrwxrwx 18 root root 4096 Mar 20 11:59 9

drwxrwxrwx 18 root root 4096 Mar 20 11:59 a

drwxrwxrwx 18 root root 4096 Mar 20 11:59 b

drwxrwxrwx 18 root root 4096 Mar 20 11:59 c

drwxrwxrwx 18 root root 4096 Mar 20 11:59 d

drwxrwxrwx 18 root root 4096 Mar 20 11:59 e

drwxrwxrwx 18 root root 4096 Mar 20 11:59 f

提示:可以看到 /tmp/eaccelerator 缓存目录下也有内容了。以上两个检查可以确认配置是否生效。

[root@lnmp01 lib]# find /tmp/eaccelerator -type f|xargs file

/tmp/eaccelerator/5/8/eaccelerator-1502.960071: data

/tmp/eaccelerator/5/8/eaccelerator-1502.870071: data

/tmp/eaccelerator/5/8/eaccelerator-1502.670071: data

/tmp/eaccelerator/0/c/eaccelerator-1502.410171: data

/tmp/eaccelerator/6/8/eaccelerator-1502.680071: data

/tmp/eaccelerator/2/e/eaccelerator-1502.556571: data

/tmp/eaccelerator/f/b/eaccelerator-1502.300171: data

/tmp/eaccelerator/3/e/eaccelerator-1502.085171: data

/tmp/eaccelerator/b/8/eaccelerator-1502.571071: data

/tmp/eaccelerator/9/7/eaccelerator-1502.978961: data

/tmp/eaccelerator/1/c/eaccelerator-1502.830171: data

提示:重启 PHP 服务后,通过访问 phoinfo 页面,就会有以上缓存文件。以上就是 cache 的内容,而且是 phpinfo 的页面缓存内容,类型为 data 。

        使用 tmpfs 优化 eAcclerator 缓存目录:

        tmpfs 是一种基于内存的文件系统,通常使用 tmpfs 作为数据临时存储,比本地磁盘存储快很多,此方法适用于临时使用的各类缓存场景。例如:上传图片时很多软件默认在 /tmp 下临时缓存切图、存放 session 数据,则可以让 /tmp 使用 tmpfs 文件系统来加快访问效率。此处将缓存目录 /tmp/eaccelerator 挂载到 /tmp/eaccelerator 文件系统上,让访问缓存的数据更快。

        详细操作如下所示:

[root@lnmp01 lib]# mount -t tmpfs -o size=16m tmpfs /tmp/eaccelerator       

# 创建16M 大小的 tmpfs 类型文件系统挂载到 /tmp/eaccelerator

[root@lnmp01 lib]# df -h     # 检查挂载情况。

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda3       6.6G  3.2G  3.1G  51% /

tmpfs           112M     0  112M   0% /dev/shm

/dev/sda1       190M   34M  146M  19% /boot

tmpfs            16M     0   16M   0% /tmp/eaccelerator

[root@lnmp01 lib]# grep eacc /proc/mounts       # 检查挂载情况。

tmpfs /tmp/eaccelerator tmpfs rw,relatime,size=16384k 0 0

[root@lnmp01 lib]# vi /etc/fstab       # 配置永久挂载,生产场景 size 可根据需要调整。

[root@lnmp01 lib]# tail -1 /etc/fstab

tmpfs                   /tmp/eaccelerator       tmpfs   size=16m        0 0

[root@lnmp01 lib]# umount /tmp/eaccelerator

[root@lnmp01 lib]# grep eacc /proc/mounts

[root@lnmp01 lib]# mount -a    #  测试永久挂载。

[root@lnmp01 lib]# grep eacc /proc/mounts

tmpfs /tmp/eaccelerator tmpfs rw,relatime,size=16384k 0 0

到此为止,eaccelerator 插件安装配置完成。

配置 XCache 插件加速:

        提示:XCache 和 eAcclerator 功能相近,安装一个即可。配置 XCache 之前应删除 eAcclerator 的所有配置。

        xcache.ini 参数说明:        

        XCache 软件的解压目录 /home/oldboy/tools/xcache-3.2.0/ 下存在一个名字为 xcache.ini 的配置文件,即 XCache 的配置文件。(XCache 配置文件参数说明见 << Web 集群实战 P270 >>)

        修改 php.ini 配置 XCache:

        ① 先在配置 XCache 参数前加个配置分界符,详细的操作过程如下:

[root@lnmp01 ~]# cd /application/php/lib/

[root@lnmp01 lib]# echo >>php.ini

[root@lnmp01 lib]# echo ';xcache config by Zhang Lei 2018-3-29-------' >>php.ini

[root@lnmp01 lib]# tail -2 php.ini

                                                                    

;xcache config by Zhang Lei 2018-3-29-------

        ② 编辑 xcache.ini ,修改 XCache 的配置参数:

[root@lnmp01 lib]# vim /home/oldboy/tools/xcache-3.2.0/xcache.ini   # 调整关键参数。   

xcache.size  =                  256M

xcache.count =                 2

xcache.ttl   =                     86400

xcache.gc_interval =        3600

xcache.var_size  =           64M

        ③ 将修改后的 xcache.ini 合并到 php.ini 结尾:

[root@lnmp01 lib]# cat /home/oldboy/tools/xcache-3.2.0/xcache.ini >>php.ini

[root@lnmp01 lib]# tail -85 php.ini|egrep -v "^;|^$"

[xcache-common]

extension = xcache.so

[xcache.admin]

xcache.admin.enable_auth = On

xcache.admin.user = "mOo"

xcache.admin.pass = "md5 encrypted password"

[xcache]

xcache.shm_scheme =        "mmap"

xcache.size  =               256M

xcache.count =                 2

xcache.slots =                8K

xcache.ttl   =                 86400

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 加速情况配置:

        执行 PHP 命令,查看缓存的生效情况:

[root@lnmp01 lib]# /application/php/bin/php -v

PHP Warning:  Cannot load module 'XCache' because conflicting module 'eAccelerator' is already loaded in Unknown on line 0           

        上面提示说 XCache 和 eaccelerator 冲突。在实际工作中,这两个软件可以任选其一。此时可以把 eacclerator 的配置参数删除,保留 XCache 参数。

[root@lnmp01 lib]# /bin/cp php.ini php.ini_include_eacc_xcache  #  备份。   

[root@lnmp01 lib]# sed -n '1924,1938p' php.ini     #  取出 eacclerator 在 php.ini 的配置。

[eaccelerator]

extension=eaccelerator.so

eaccelerator.shm_size="64"

eaccelerator.cache_dir="/tmp/eaccelerator"

eaccelerator.enable="1"

eaccelerator.optimizer="1"

eaccelerator.check_mtime="1"

eaccelerator.debug="0"

eaccelerator.filter=""

eaccelerator.shm_max="0"

eaccelerator.shm_ttl="3600"

eaccelerator.shm_prune_period="3600"

eaccelerator.shm_only="0"

eaccelerator.compress="1"

eaccelerator.compress_level="9"

[root@lnmp01 lib]# sed -i '1924,1938d' php.ini     #  确保无错误后用 sed 删除。

[root@lnmp01 lib]# /application/php/bin/php -v     

#  再次执行 PHP 命令,输出结果表示配置成功。

PHP 5.3.27 (cli) (built: Dec 23 2017 16:24:25)

Copyright (c) 1997-2013 The PHP Group

Zend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies

    with XCache v3.2.0, Copyright (c) 2005-2014, by mOo

    with XCache Cacher v3.2.0, Copyright (c) 2005-2014, by mOo

        XCache 和 eacclerator 均使用系统的共享内存作为存储空间,因此有必要调整系统的共享内存大小参数:

[root@lnmp01 lib]# tail /etc/sysctl.conf

kernel.msgmnb = 65536

# Controls the maximum size of a message, in bytes

kernel.msgmax = 65536

# Controls the maximum shared segment size, in bytes

kernel.shmmax = 68719476736

# Controls the maximum number of shared memory segments, in pages

kernel.shmall = 4294967296

        重启 PHP 服务,然后通过 phpinfo 界面检查 XCache 插件结果,如下所示:

 

        配置 Web 界面查看 XCache 缓存加速信息:

        使用 md5sum 命令,通过输入字符串生成 XCache 管理员的密码:

[root@lnmp01 lib]# echo -n "123456"|md5sum

e10adc3949ba59abbe56e057f20f883e  -

        编辑 php.ini 文件,在结尾的 XCache 配置部分把这一串密文内容按照如下参数修改:

[root@lnmp01 lib]# vim php.ini

xcache.admin.enable_auth = On

xcache.admin.user = "oldboy"

xcache.admin.pass = "e10adc3949ba59abbe56e057f20f883e"

        然后复制 XCache 软件下面的缓存加速管理 PHP 程序到站点目录下:

[root@lnmp01 lib]# cd /home/oldboy/tools/xcache-3.2.0

[root@lnmp01 xcache-3.2.0]# cp -a htdocs/ /application/nginx/html/blog/xadmin

[root@lnmp01 xcache-3.2.0]# chown -R nginx.nginx /application/nginx/html/blog/xadmin

[root@lnmp01 xcache-3.2.0]# pkill php-fpm

[root@lnmp01 xcache-3.2.0]# /application/php/sbin/php-fpm

        访问 http://blog.etiantian.org/xadmin/index.php ,弹出验证框,需输入用户和密码:

 

        登陆后的相关信息展示如下所示:

 

        有关缓存 XCache 的状态、命中等相关信息都可以通过这个 XCache 管理界面查看。

配置 ZendOpcache 插件加速:

        配置 ZendOpcache 参数:

        在 php.ini 的最后面加入如下几行:

[opcache]

zend_extension=/application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/opcache.so

;extension=opcache.so

opcache.memory_consumption=32

opcache.interned_strings_buffer=8

opcache.max_accelerated_files=1000

opcache.revalidate_freq=60

opcache.fast_shutdown=1

opcache.enable_cli=1

        检查配置文件,查看配置结果:

[root@lnmp01 lib]# tail php.ini   

[opcache]

zend_extension=/application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/opcache.so

;extension=opcache.so

opcache.memory_consumption=32

opcache.interned_strings_buffer=8

opcache.max_accelerated_files=1000

opcache.revalidate_freq=60

opcache.fast_shutdown=1

opcache.enable_cli=1

        检查 ZendOpcache 生效情况:

[root@lnmp01 lib]# /application/php/bin/php -v

PHP 5.3.27 (cli) (built: Dec 23 2017 16:24:25)

Copyright (c) 1997-2013 The PHP Group

Zend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies

    with XCache v3.2.0, Copyright (c) 2005-2014, by mOo

    with Zend OPcache v7.0.5, Copyright (c) 1999-2015, by Zend Technologies

    with XCache Cacher v3.2.0, Copyright (c) 2005-2014, by mOo

        可以看到 ZendOPcache 已经生效,并且貌似和 XCache 相处的比较融洽。工作中慎重选择。现在重启 PHP 服务,并通过 phpinfo 界面查看 XCache 插件结果:

 

        ZendOPcache 配置参数说明:详见<< Web 集群实战 P277 >>

        说明:ZendOPcache 是 PHP 官方的新一代缓存加速软件,PHP 5.5 以前可以通过 ZendOPcache 软件以插件的方式安装,从 PHP 5.5 版本开始已经整合到 PHP 软件里,编译时只需要指定一个参数即可(--enable-opcache)。

        ZendOPcache 可能是未来的首选,现在的稳定性还有待检验。PHP 5.5 及以上版本的安装编译完整参数:详见 << Web 集群实战 P278 >>。

补充知识:

        安装 PHP 扩展插件的时候,常常会有这样一条命令:/application/php/bin/phpize。事实上,phpize 是用来扩展 PHP 扩展模块的。比如想在原来编译好的 PHP 中加入 Memcache 等扩展模块,可以使用 phpize 工具。

        编译 PHP 后,其 bin 目录下会有 phpize 这个脚本文件。在编译要添加的扩展模块之前,执行一下 phpize 就可以了。

        PHP 指定 MySQL 的编译参数带来的问题:详见 <<  Web 集群实战 P280 >>。

PHP 缓存加速器介绍与环境准备    

PHP缓存加速器介绍:

        操作码介绍及缓存原理:

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

        PHP 缓存加速软件介绍:

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

LNMP 环境 PHP 缓存加速器的原理详解:

         在 LNMP 环境中,PHP 引擎启动独立的 FCGI 即 php-fpm 进程,由它监听来自 Nginx 的 PHP 程序请求,并交给 PHP 引擎解析处理,整个执行流程大概如下:

        ① Nginx 接收客户端的 PHP 程序访问请求。

        ② Nginx 根据扩展名等过滤规则将 PHP 程序请求传递给解析 PHP 的 FCGI(php-fpm)进程。

        ③ php-fpm 进程调用 PHP 解析器读取站点磁盘上的 PHP 文件,并加载到内存中。

        ④ PHP 解析器将 PHP 程序编译成为 Opcode 文件,然后把 Opcode 缓存起来。

        ⑤ php-fpm 引擎执行 Opcode 后,返回数据给 Nginx,进而返回给客户端。

        ⑥ Nginx 接收客户新的 PHP 程序请求,php-fpm 引擎就会直接读取缓存中的 Opcode 并执行,将结果返回。该过程无需第 4 步操作,从而提升了 PHP 编译解析效率。

PHP 缓存加速器软件种类及选择建议:

        PHP 缓存加速器软件常见的种类有 XCache、eAccelerator、ZendOpcache、APC(Alternative PHP Cache)等。根据企业的业务需求及选择前的压力测试结果或根据个人的经验偏好选择。建议首选 XCache,其次是 eAccelerator ,任选其一即可。

        首选 XCache 的原因如下:

        ① 经过测试,XCache 效率更高、速度更快;

        ② XCache 软件开发社区更活跃;

        ③ 支持更高版本的 PHP 。

        次选 eAccelerator 的原因如下:

        ① 安装及配置参数更简单,加速效果也不错;

        ② 资料较多,但软件更新慢,社区不灵活;

        ③ 仅适合 PHP 版本 5.4 以下的程序。

        选择 ZendOpcache 的原因如下:

        ① 是 PHP 官方研发的新一代缓存加速软件,以后的发展潜力可能会很好。PHP 5.5 以前的版本可以通过 ZendOpcache 软件以插件扩展的方式安装,从 PHP 5.5 版本开始已经整合到 PHP 软件里了,编译时只需指定一个参数即可,例如:--enable-opcache;

        ② ZendOpcache 可能是未来的缓存加速首选,现在的稳定性还有待检查,小规模环境下 PHP 5 以前的版本可以通过插件方式安装使用,PHP 5 以上的版本可以直接指定参数编译使用。

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

        在安装 PHP 扩展及缓存加速软件之前,需要先安装好 LNMP 的完整环境。

[root@lnmp02 blog]# lsof -i :80                     

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

nginx   1795  root    8u  IPv4  12472      0t0  TCP *:http (LISTEN)

nginx   1796 nginx    8u  IPv4  12472      0t0  TCP *:http (LISTEN)

[root@lnmp02 blog]# lsof -i :9000

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

php-fpm 1799  root    7u  IPv4  12492      0t0  TCP localhost:cslistener (LISTEN)

php-fpm 1800 nginx    0u  IPv4  12492      0t0  TCP localhost:cslistener (LISTEN)

php-fpm 1801 nginx    0u  IPv4  12492      0t0  TCP localhost:cslistener (LISTEN)

[root@lnmp02 blog]# pwd

/application/nginx/html/blog

[root@lnmp02 blog]# cd /application/nginx/html/blog

[root@lnmp02 blog]# vim phpinfo.php

<?php

phpinfo();

?>

 

有关 LNMP 环境扩展软件的部署说明:

        LNMP 缓存加速特别提示:

        无论是 Apache 还是 Nginx ,最后都是通过 PHP 提供动态程序解析的。因此不管是 Apache 的 libphp5.so 模块方式,还是 Nginx 的 FCGI 的 PHP 服务方式,最终在 PHP 引擎上的优化是一致的。

解决部分加速软件的 Perl 编译问题:

        在下面各类软件的安装编译过程中,如果不解决 Perl 的一些环境问题可能会带来意想不到的安装错误或警告。

        ① 配置环境变量 LC_ALL

        配置环境变量 LC_ALL 的过程如下:

[root@lnmp01 ~]# echo 'export LC_ALL=C'>>/etc/profile     

# 设置环境变量,解决后面 Perl 程序插件的编译问题。

[root@lnmp01 ~]# tail -1 /etc/profile    

export LC_ALL=C

[root@lnmp01 ~]# source /etc/profile

[root@lnmp01 ~]# echo $LC_ALL

C   

        ② 安装 Perl 相关软件依赖

        执行 yum install perl-CPAN -y yum install perl-devel -y 任意一个即可(大约 17 个依赖包),提前解决后面安装软件时可能遇到的报错问题。

安装 PHP 缓存加速器扩展:

安装 PHP eAccelerator 缓存加速模块:

        eAccelerator 缓存加速插件说明:

        eAccelerator 是一个免费的、开源的 PHP 加速、优化及缓存的扩展插件软件,它可以缓存 PHP 程序编译后的中间代码文件(opcode)、session 数据等,降低 PHP 程序在编译解析时对服务器的性能开销。eAccelerator 还可以加快 PHP 程序的执行速度,降低服务器负载压力,使 PHP 程序代码执行效率提高 1~10 倍。

        eAccelerator 会把编译好的 PHP 程序存放在共享内存里,然后每次从内存里调用执行,可以设定把一些不合适放在内存里缓存的编译结果存储到磁盘上,默认情况下,磁盘和内存缓存都会被eAccelerator 使用。

        eAccelerator 最新版的下载地址为:https://github.com/eaccelerator/eaccelerator/downloads

        eAccelerator 插件安装过程:

        具体的安装命令如下:

cd /home/oldboy/tools/

wget https://github.com/downloads/eaccelerator/eaccelerator/eaccelerator-0.9.6.tar.bz2

tar xf eaccelerator-0.9.6.tar.bz2

cd eaccelerator-0.9.6

/application/php/bin/phpize

./configure --enable-eaccelerator=shared --with-php-config=/application/php/bin/php-config

make

make install

cd ../

ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

        安装操作详细过程如下:

[root@lnmp01 tools]# cd /home/oldboy/tools/

[root@lnmp01 tools]# tar xf eaccelerator-0.9.6.tar.bz2

[root@lnmp01 tools]# cd eaccelerator-0.9.6

[root@lnmp01 eaccelerator-0.9.6]# /application/php/bin/phpize

[root@lnmp01 eaccelerator-0.9.6]# ./configure --enable-eaccelerator=shared --with-php-config=/application/php/bin/php-config

[root@lnmp01 eaccelerator-0.9.6]# make

[root@lnmp01 eaccelerator-0.9.6]# make install

[root@lnmp01 eaccelerator-0.9.6]# ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

eaccelerator.so

[root@lnmp01 eaccelerator-0.9.6]# cd ../

提示:最后生成的 eaccelerator.so 模块就表示 eaccelerator 安装成功。

安装 PHP XCache 缓存加速模块:

        XCache 缓存加速插件说明:

        XCache 是一个开源、又快又稳定的 PHP opcode 缓存器、优化器。XCache 把 PHP 程序编译后的数据(opcode)缓存到共享内存里,避免相同的程序重复编译。用户请求相同的 PHP 程序时,可以直接使用缓存中编译好的数据,从而提高 PHP 的访问速度,通常可以提升 2~5 倍,并大幅降低服务器负载开销。

        XCache 插件的安装过程:

        具体的安装命令集如下:

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 /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

cd ../

        安装操作详细过程如下:  

[root@lnmp02 oldboy]# cd /home/oldboy/tools/

[root@lnmp02 tools]# wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.bz2

[root@lnmp02 tools]# ls xcache-3.2.0.tar.bz2

xcache-3.2.0.tar.bz2

[root@lnmp02 tools]# tar xf xcache-3.2.0.tar.bz2

[root@lnmp02 tools]# cd xcache-3.2.0

[root@lnmp02 xcache-3.2.0]# /application/php/bin/phpize

[root@lnmp02 xcache-3.2.0]# ./configure --enable-xcache --with-phpconfig=/application/php/bin/php-config

[root@lnmp02 xcache-3.2.0]# make

[root@lnmp02 xcache-3.2.0]# make install

[root@lnmp02 xcache-3.2.0]# ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

eaccelerator.so  xcache.so

[root@lnmp02 xcache-3.2.0]# cd ../

提示:最后生成的 xcache..so 模块就表示 xcache 安装成功。

安装 PHP ZendOpcache 官方加速插件:

        ZendOpcache 插件说明:                    

        从 PHP 5.5 开始,官方已经集成了新一代的缓存加速软件,其名字为 ZendOpcache,功能和上面的两种相似但又有少许不同。据官方说,ZendOpcache 缓存速度更快。

        这几个 PHP 加速插件的主要原理基本相同,就是把 PHP 执行后的数据缓存到内存中从而避免重复的编译过程,使其能够直接使用缓存中已编译的代码,从而提高速度,降低服务器负载。他们的效率是显而易见的,一些大型的 CMS ,每次打开一个页面要调用数十个 PHP 文件,执行数万行代码,效率可想而知,安装上述加速器后,打开页面的速度明显加快。

        PHP 5.5 以上版本,支持 ZendOpcache 很简单,只需在编译 PHP 5.5 时加上 --enable-opcache就行了。在 PHP 5.5 版本以前,ZendOpcache 也有独立的软件,并且也支持低版本的 PHP 5.2.*、PHP 5.3.*、PHP5.4.*。下面以 PHP 5.3 版本为例讲解 ZendOpcache 软件,以 PHP 扩展插件的方式介绍安装步骤。

        官方下载地址为:http://pecl.php.net/package/ZendOpcache。

        ZendOpcache 插件安装过程:

        由于前面 LNMP 环境使用的是 PHP 5.3 版本,所以需要以 PHP 扩展插件的方式安装,不能使用 PHP 编译直接加参数( --enable-opcache)的方式安装(PHP 5.5 以上才可以)。

        具体的安装命令集如下:

        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 /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

        cd ../

        安装操作详细过程如下:

[root@lnmp01 tools]#  cd /home/oldboy/tools

[root@lnmp01 tools]#  wget -q http://pecl.php.net/get/zendopcache-7.0.5.tgz

[root@lnmp01 tools]#  tar xf zendopcache-7.0.5.tgz

[root@lnmp01 tools]#  cd zendopcache-7.0.5

[root@lnmp01 zendopcache-7.0.5]#  /application/php/bin/phpize

[root@lnmp01 zendopcache-7.0.5]#  ./configure --enable-opcache --with-config=php-/application/php/bin/php-config

[root@lnmp01 zendopcache-7.0.5]#  make

[root@lnmp01 zendopcache-7.0.5]#  make install

[root@lnmp01 zendopcache-7.0.5]#  ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

eaccelerator.so  opcache.so  xcache.so

提示:最后生成的 opcache.so 模块就表示 opcache 安装成功。

安装数据库缓存及其他 PHP 扩展插件:         

安装 PHP Memcached 扩展插件:

        Memcached 缓存软件说明:

        Memcached 是一个开源的、支持高性能、高并发及分布式的内存缓存服务软件。Memcached 服务分为服务器端和客户端两部分,期中服务器端软件的名字形如 Memcached-1.4.13.tar.gz,客户端软件的名字形如 Memcache-2.27.tar.gz。Memcached是高性能的分布式内存缓存服务。使用Memcached 的主要目的是,通过在自身内存中缓存数据库的查询结果,减少数据库访问次数,以提高动态 Web 应用的速度,提高网站架构的并发能力和扩展性。

        Memcached 服务通过在事先规划好的系统内存空间中临时缓存数据库中的各类数据,以达到减少前端业务对数据库的直接高并发访问,从而提升大规模网站集群中动态服务的并发访问能力。

        生产场景的 Memcached 服务一般被用来保存网站中经常被读取的对象或数据,就像我们的客户端浏览器把经常访问的网页缓存起来一样,通过内存缓存来存取对象或数据要比磁盘存取快很多,因为磁盘是机械的介质。因此,在当今的 IT 企业中,Memcached 的应用范围很广。

        Memcached 服务的工作步骤如下:

        ① 程序首先检查客户端请求的数据在 Memcached 服务的缓存中是否存在。如果存在,直接把请求的数据返回,不再请求数据库;

        ② 如果请求的数据在 Memcached 缓存中不存在,则程序会去 Memcached 后端的数据库服务;

        ③ 把从数据库中取到的数据返回给客户端;

        ④ 同时把新取到的数据库的数据缓存一份到 Memcached 服务缓存中,下次同样的请求就直接从 Memcached 服务缓存返回数据,从而减轻数据库的访问压力。

        Memcached 缓存 PHP 扩展插件安装:

        Memcached 分为服务器端软件和客户端软件两部分,本文是 Memcached 客户端 PHP 的扩展插件(Memcache-2.2.7.tgz)在 PHP 环境中的安装,用于访问 Memcached 服务器端数据。

        PHP 的Memcache 扩展插件下载地址为:http://pecl.php.net/package/Memcache 。

        具体的安装命令集如下:( 提前下载安装包 )

        cd /home/oldboy/tools

        tar zxf memcache-2.2.5.tgz

        cd memcache-2.2.5

        /application/php/bin/phpize

        ./configure --enable-memcache --with-php-config=/application/php/bin/php-config

        make

        make install

        ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

        cd ../

        安装操作详细过程如下:

[root@lnmp01 oldboy]# cd /home/oldboy/tools

[root@lnmp01 tools]# ls memcache-2.2.5.tgz

memcache-2.2.5.tgz

[root@lnmp01 tools]# tar zxf memcache-2.2.5.tgz

[root@lnmp01 tools]# cd memcache-2.2.5

[root@lnmp01 memcache-2.2.5]#  /application/php/bin/phpize

[root@lnmp01 memcache-2.2.5]# ./configure --enable-memcache --with-php-config=/application/php/bin/php-config

[root@lnmp01 memcache-2.2.5]# make

[root@lnmp01 memcache-2.2.5]# make install

[root@lnmp01 memcache-2.2.5]# ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

eaccelerator.so  memcache.so  opcache.so  xcache.so

提示:最后生成的 memcache.so 模块就表示 memcache 安装成功。

安装 PDO_MYSQL 扩展模块:

        PDO_MYSQL 扩展插件说明:

        PDO 扩展为 PHP 访问数据库定义了一个轻量级一致性的接口,它提供了一个数据访问抽象层。这样无论使用的是什么数据库,都可以通过一致性的函数执行查询并获取数据。

        PDO_MYSQL 扩展插件的安装过程:

        PDO_MYSQL 的安装有两种方法,一种是插件方式安装,另一种是编译 PHP 时加入PDO_MYSQL 支持,直接指定 PHP 的对应 PDO_MYSQL 编译参数安装,例如:--with-pdo-mysql

=mysqlnd 。

        同时,PHP 环境也可以不安装 MySQL 软件,直接指定参数 --with-mysql=mysqlnd 即可让 PHP 支持连接 MySQL 数据库。

        具体的安装命令集如下:( 提前下载安装包 )

cd /home/oldboy/tools

ls 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

make

make install

ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

cd ../

        安装操作详细过程如下:

[root@lnmp01 tools]# cd /home/oldboy/tools/

[root@lnmp01 tools]# ls PDO_MYSQL-1.0.2.tgz

PDO_MYSQL-1.0.2.tgz

[root@lnmp01 tools]# tar xf PDO_MYSQL-1.0.2.tgz

[root@lnmp01 tools]# cd PDO_MYSQL-1.0.2

[root@lnmp01 PDO_MYSQL-1.0.2]#  /application/php/bin/phpize

[root@lnmp01 PDO_MYSQL-1.0.2]# ./configure --with-php-config=/application/php/bin/php-config --with-pdo-mysql=/application/mysql        

[root@lnmp01 PDO_MYSQL-1.0.2]# make   

[root@lnmp01 PDO_MYSQL-1.0.2]# make install

[root@lnmp01 PDO_MYSQL-1.0.2]# ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

eaccelerator.so  memcache.so  opcache.so  pdo_mysql.so  xcache.so

提示:生成模块 pdo_mysql.so 表示PDO_MYSQL 扩展插件安装成功。

安装图像处理程序及 imagick 扩展模块:

        安装 ImageMagick 图像软件:

        ImageMagick 是一套功能强大、稳定且免费的工具包和开发包,可以用来读、写和处理超过 89 种基本格式的图片文件,包括流行的 tiff、jpeg、gif、png、pdf 以及 PhotoCD 等。利用 ImageMagick 可以根据 Web 应用程序的需要动态生成图片,还可以对一个(或一组)图片进行改变大小、旋转、锐化、减色或增加特效等操作,并将操作的结果以相同格式或其他格式保存。对图片的操作,既可以通过命令行进行,也可以用C/C++

Perl、Java、PHP、Python 或 Ruby 编程来完成。同时 ImageMagick 提供了一个高质量的 2D 工具包,部分支持 SVG。现在,ImageMagick 的主要精力集中在加强性能、减少 bug 以及提供稳定的 API 和 ABI 上。

        ImageMagick 的常见功能如下:

        ① 将图片从一个格式转化成另一个格式,包括直接转化成图标;

        ② 可以改变图片尺寸,旋转、锐化(sharpen)、减色、设置图片特效;

        ③ 对图片设置各种尺寸缩略图;

        ④ 将图片设置为可以适用于 Web 背景的透明图片;

        ⑤ 将一组图片做成 gif 动画,直接 convert ;

        ⑥ 将几张图片做成一张组合图片;

        ⑦ 在一个图片上写字或画图形,带文字阴影和边框渲染;

        ⑧ 给图片加边框或框架;

        ⑨ 取得一些图片的特性信息。

        ImageMagick 几乎包括了 gimp 可以实现的所有常规插件功能,甚至包括各种曲线参数的渲染功能。下载地址为:http://download.chinaunix.net/download/0001000/95.shtml,需要提前下载好。

        具体的安装命令集如下:( 提前下载安装包 )

cd /home/oldboy/tools

ls -l ImageMagick.tar.gz

tar xf ImageMagick.tar.gz

cd ImageMagick-6.5.1-2

./configure

make && make install

cd  ../

提示:① 此图像软件安装时 make 步骤耗时较长;

          ② 该软件不是安装 PHP 的扩展,因此没有生成 .so 的模块文件。

        安装操作详细过程如下:

[root@lnmp01 tools]# cd /home/oldboy/tools/

[root@lnmp01 tools]# ls -l ImageMagick.tar.gz

[root@lnmp01 tools]# tar xf ImageMagick.tar.gz

[root@lnmp01 tools]# cd ImageMagick-6.5.1-2

[root@lnmp01 ImageMagick-6.5.1-2 ]# ./configure

[root@lnmp01 ImageMagick-6.5.1-2 ]# make && make install

[root@lnmp01 ImageMagick-6.5.1-2 ]# cd  ../

提示:关于 ImageMagick 的安装报错及解决方法见《 Web 集群实战 P258 》。

        安装 imagick PHP 扩展插件:

        imagick 插件工作需要 ImageMagick 软件的支持,所以必须要安装 ImageMagick ,否则会报错。

        imagick 插件是一个可以供 PHP 调用 ImageMagick 功能的扩展模块。使用这个扩展可以使 PHP 具备和 ImageMagick 相同的功能。

        安装了  ImageMagick 图像程序后,再安装 PHP  的扩展 imagick 插件,才能使用  ImageMagick 提供的 API 进行图片的创建与修改、压缩等操作,因为它们都集成在 imagick 这个 PHP 扩展中。

        具体的安装命令集如下:( 提前下载安装包 )

        cd /home/oldboy/tools

        ls -l imagick-2.3.0.tgz         

        tar zxf imagick-2.3.0.tgz

        cd imagick-2.3.0

        /application/php/bin/phpize

       ./configure --with-php-config=/application/php/bin/php-config

        make && make install

        ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

        cd ../

        安装操作详细过程如下:

[root@lnmp01 tools]# cd /home/oldboy/tools

[root@lnmp01 tools]# ls -l imagick-2.3.0.tgz         

[root@lnmp01 tools]# tar zxf imagick-2.3.0.tgz

[root@lnmp01 tools]# cd imagick-2.3.0

[root@lnmp01 imagick-2.3.0]# /application/php/bin/phpize

[root@lnmp01 imagick-2.3.0]# ./configure --with-php-config=/application/php/bin/php-config

[root@lnmp01 imagick-2.3.0]# make

[root@lnmp01 imagick-2.3.0]# make install

[root@lnmp01 imagick-2.3.0]# ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

eaccelerator.so  imagick.so  memcache.so  opcache.so  pdo_mysql.so  xcache.so

提示:生成  imagick.so 模块表示 imagick 插件 安装成功。

        检查所有 PHP 扩展插件模块安装的成果:

[root@lnmp01 tools]# ls -l /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

total 2984

-rwxr-xr-x 1 root root  416797 Mar 19 12:11  eaccelerator.so

-rwxr-xr-x 1 root root 1070977 Mar 20 08:40 imagick.so

-rwxr-xr-x 1 root root  246672 Mar 19 14:12  memcache.so

-rwxr-xr-x 1 root root  491814 Mar 19 13:12  opcache.so

-rwxr-xr-x 1 root root  156004 Mar 19 14:35  pdo_mysql.so

-rwxr-xr-x 1 root root  658468 Mar 19 12:35  xcache.so

        当前一共有 6 个常用扩展模块,其中 eaccelerator、opcache、xcache 属于同类软件,生产环境中只需安装一种即可,否则会产生使用冲突。

配置 PHP 加速与缓存相关的扩展插件模块:

配置 Memcache/PDO_MYSQL/imagick 模块生效:

        修改 PHP 的配置文件 /application/php/lib/php.ini :

        ① 执行 vi  /application/php/lib/php.ini 命令,编辑查找该配置文件的 extension_dir = "./ " 参数,修改为 extension_dir = "/application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/",这个参数对应的路径就是前文编译的模块所在的路径。

        详细的操作过程如下:  (操作前要备份该配置文件)

[root@lnmp01 tools]# cd /application/php/lib  

[root@lnmp01 lib]# vi  /application/php/lib/php.ini     

[root@lnmp01 lib]# grep "extension_dir = " php.ini

extension_dir = "/application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/"

        ② 在 vim 命令模式下按 Shift + G 键跳到文件结尾增加如下几行,然后保存:

        ;--cache ext start by Zhang Lei 2018-3-28--

        extension = memcache.so

        extension = pdo_mysql.so

        extension = imagick.

        ;--cache ext end by Zhang Lei 2018-3-28--

        详细的操作过程如下:

[root@lnmp01 lib]# vi  /application/php/lib/php.ini

[root@lnmp01 lib]# tail -5 php.ini     

;--cache ext start by Zhang Lei 2018-3-28--

extension = memcache.so

extension = pdo_mysql.so

extension = imagick.so

;--cache ext end by Zhang Lei 2018-3-28--

检查配置的相关模块生效情况:

        重启 PHP 服务,编写测试程序 phpinfo:

[root@lnmp01 lib]# pkill php-fpm

[root@lnmp01 lib]# ps -ef|grep php-fpm|grep -v grep

[root@lnmp01 lib]# /application/php/sbin/php-fpm         

[root@lnmp01 blog]# ps -ef|grep php-fpm|grep -v grep|wc -l

3

[root@lnmp01 conf]# cd /application/nginx/html/blog/

[root@lnmp01 blog]# vi test.php

[root@lnmp01 blog]# cat /application/nginx/html/blog/test.php

<?php phpinfo();

?>

        检查 Memcache 扩展插件:

        配置好客户端的 hosts 解析,然后在浏览器输入 www.etiantian.org/test.php 页面的地址,出现的内容如图所示:

 

        通过快捷键 Ctrl + F 进行页面搜索,如下图所示,表示 Memcached 插件已生效:

 

        检查 PDO_MYSQL 扩展插件,如图所示:

 

        检查 Imagick 扩展插件,如图所示:

 

        到此为止,pdo_mysql.so、imagick.so、memcache.so 三个 PHP 的扩展模块就全部安装及配置完毕。

配置 eAcclerator 插件生效并优化参数:

        配置 eAcclerator 缓存目录:

[root@lnmp01 lib]# cd /application/php/lib/  

[root@lnmp01 lib]# mkdir -p /tmp/eaccelerator     

# 此目录可以用 tmpfs 内存文件系统或 SSD 固态硬盘来存储。

[root@lnmp01 lib]# chown -R nginx.nginx /tmp/eaccelerator

[root@lnmp01 lib]# ls -ld /tmp/eaccelerator

drwxr-xr-x 2 nginx nginx 4096 Mar 20 11:36 /tmp/eaccelerator

        配置 eAcclerator 参数,命令如下:

cat   >>   /application/php/lib/php.ini<<EOF

[eaccelerator]

extension=eaccelerator.so

eaccelerator.shm_size="64"

eaccelerator.cache_dir="/tmp/eaccelerator"

eaccelerator.enable="1"

eaccelerator.optimizer="1"

eaccelerator.check_mtime="1"

eaccelerator.debug="0"

eaccelerator.filter=""

eaccelerator.shm_max="0"

eaccelerator.shm_ttl="3600"

eaccelerator.shm_prune_period="3600"

eaccelerator.shm_only="0"

eaccelerator.compress="1"

eaccelerator.compress_level="9"

EOF

[root@lnmp01 lib]# tail -15 php.ini      # 检查操作后的配置结果。

[eaccelerator]

extension=eaccelerator.so

eaccelerator.shm_size="64"

eaccelerator.cache_dir="/tmp/eaccelerator"

eaccelerator.enable="1"

eaccelerator.optimizer="1"

eaccelerator.check_mtime="1"

eaccelerator.debug="0"

eaccelerator.filter=""

eaccelerator.shm_max="0"

eaccelerator.shm_ttl="3600"

eaccelerator.shm_prune_period="3600"

eaccelerator.shm_only="0"

eaccelerator.compress="1"

eaccelerator.compress_level="9"

提示:关于 eAcclerator 配置参数的详细说明见<< Web集群实战 P266 >>

        检查 eAcclerator 加速配置情况:

[root@lnmp01 lib]# /application/php/bin/ph

phar        phar.phar   php         php-config  phpize      

[root@lnmp01 lib]# /application/php/bin/php -v

PHP 5.3.27 (cli) (built: Dec 23 2017 16:24:25)

Copyright (c) 1997-2013 The PHP Group

Zend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies

    with eAccelerator v0.9.6, Copyright (c) 2004-2010 eAccelerator, by eAccelerator        

        重启 PHP 服务:

[root@lnmp01 lib]# pkill php-fpm

[root@lnmp01 lib]# ps -ef|grep php-fpm|grep -v grep

[root@lnmp01 lib]# /application/php/sbin/php-fpm

[root@lnmp01 lib]# ps -ef|grep php-fpm|grep -v grep|wc -l

3

        通过 phpinfo 检查 eAcclerator 插件结果,如图所示:

 

        此时查看缓存目录 /tmp/eaccelerator,结果如下:

[root@lnmp01 lib]# ls -l /tmp/eaccelerator

total 64

drwxrwxrwx 18 root root 4096 Mar 20 11:59 0

drwxrwxrwx 18 root root 4096 Mar 20 11:59 1

drwxrwxrwx 18 root root 4096 Mar 20 11:59 2

drwxrwxrwx 18 root root 4096 Mar 20 11:59 3

drwxrwxrwx 18 root root 4096 Mar 20 11:59 4

drwxrwxrwx 18 root root 4096 Mar 20 11:59 5

drwxrwxrwx 18 root root 4096 Mar 20 11:59 6

drwxrwxrwx 18 root root 4096 Mar 20 11:59 7

drwxrwxrwx 18 root root 4096 Mar 20 11:59 8

drwxrwxrwx 18 root root 4096 Mar 20 11:59 9

drwxrwxrwx 18 root root 4096 Mar 20 11:59 a

drwxrwxrwx 18 root root 4096 Mar 20 11:59 b

drwxrwxrwx 18 root root 4096 Mar 20 11:59 c

drwxrwxrwx 18 root root 4096 Mar 20 11:59 d

drwxrwxrwx 18 root root 4096 Mar 20 11:59 e

drwxrwxrwx 18 root root 4096 Mar 20 11:59 f

提示:可以看到 /tmp/eaccelerator 缓存目录下也有内容了。以上两个检查可以确认配置是否生效。

[root@lnmp01 lib]# find /tmp/eaccelerator -type f|xargs file

/tmp/eaccelerator/5/8/eaccelerator-1502.960071: data

/tmp/eaccelerator/5/8/eaccelerator-1502.870071: data

/tmp/eaccelerator/5/8/eaccelerator-1502.670071: data

/tmp/eaccelerator/0/c/eaccelerator-1502.410171: data

/tmp/eaccelerator/6/8/eaccelerator-1502.680071: data

/tmp/eaccelerator/2/e/eaccelerator-1502.556571: data

/tmp/eaccelerator/f/b/eaccelerator-1502.300171: data

/tmp/eaccelerator/3/e/eaccelerator-1502.085171: data

/tmp/eaccelerator/b/8/eaccelerator-1502.571071: data

/tmp/eaccelerator/9/7/eaccelerator-1502.978961: data

/tmp/eaccelerator/1/c/eaccelerator-1502.830171: data

提示:重启 PHP 服务后,通过访问 phoinfo 页面,就会有以上缓存文件。以上就是 cache 的内容,而且是 phpinfo 的页面缓存内容,类型为 data 。

        使用 tmpfs 优化 eAcclerator 缓存目录:

        tmpfs 是一种基于内存的文件系统,通常使用 tmpfs 作为数据临时存储,比本地磁盘存储快很多,此方法适用于临时使用的各类缓存场景。例如:上传图片时很多软件默认在 /tmp 下临时缓存切图、存放 session 数据,则可以让 /tmp 使用 tmpfs 文件系统来加快访问效率。此处将缓存目录 /tmp/eaccelerator 挂载到 /tmp/eaccelerator 文件系统上,让访问缓存的数据更快。

        详细操作如下所示:

[root@lnmp01 lib]# mount -t tmpfs -o size=16m tmpfs /tmp/eaccelerator       

# 创建16M 大小的 tmpfs 类型文件系统挂载到 /tmp/eaccelerator

[root@lnmp01 lib]# df -h     # 检查挂载情况。

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda3       6.6G  3.2G  3.1G  51% /

tmpfs           112M     0  112M   0% /dev/shm

/dev/sda1       190M   34M  146M  19% /boot

tmpfs            16M     0   16M   0% /tmp/eaccelerator

[root@lnmp01 lib]# grep eacc /proc/mounts       # 检查挂载情况。

tmpfs /tmp/eaccelerator tmpfs rw,relatime,size=16384k 0 0

[root@lnmp01 lib]# vi /etc/fstab       # 配置永久挂载,生产场景 size 可根据需要调整。

[root@lnmp01 lib]# tail -1 /etc/fstab

tmpfs                   /tmp/eaccelerator       tmpfs   size=16m        0 0

[root@lnmp01 lib]# umount /tmp/eaccelerator

[root@lnmp01 lib]# grep eacc /proc/mounts

[root@lnmp01 lib]# mount -a    #  测试永久挂载。

[root@lnmp01 lib]# grep eacc /proc/mounts

tmpfs /tmp/eaccelerator tmpfs rw,relatime,size=16384k 0 0

到此为止,eaccelerator 插件安装配置完成。

配置 XCache 插件加速:

        提示:XCache 和 eAcclerator 功能相近,安装一个即可。配置 XCache 之前应删除 eAcclerator 的所有配置。

        xcache.ini 参数说明:        

        XCache 软件的解压目录 /home/oldboy/tools/xcache-3.2.0/ 下存在一个名字为 xcache.ini 的配置文件,即 XCache 的配置文件。(XCache 配置文件参数说明见 << Web 集群实战 P270 >>)

        修改 php.ini 配置 XCache:

        ① 先在配置 XCache 参数前加个配置分界符,详细的操作过程如下:

[root@lnmp01 ~]# cd /application/php/lib/

[root@lnmp01 lib]# echo >>php.ini

[root@lnmp01 lib]# echo ';xcache config by Zhang Lei 2018-3-29-------' >>php.ini

[root@lnmp01 lib]# tail -2 php.ini

                                                                    

;xcache config by Zhang Lei 2018-3-29-------

        ② 编辑 xcache.ini ,修改 XCache 的配置参数:

[root@lnmp01 lib]# vim /home/oldboy/tools/xcache-3.2.0/xcache.ini   # 调整关键参数。   

xcache.size  =                  256M

xcache.count =                 2

xcache.ttl   =                     86400

xcache.gc_interval =        3600

xcache.var_size  =           64M

        ③ 将修改后的 xcache.ini 合并到 php.ini 结尾:

[root@lnmp01 lib]# cat /home/oldboy/tools/xcache-3.2.0/xcache.ini >>php.ini

[root@lnmp01 lib]# tail -85 php.ini|egrep -v "^;|^$"

[xcache-common]

extension = xcache.so

[xcache.admin]

xcache.admin.enable_auth = On

xcache.admin.user = "mOo"

xcache.admin.pass = "md5 encrypted password"

[xcache]

xcache.shm_scheme =        "mmap"

xcache.size  =               256M

xcache.count =                 2

xcache.slots =                8K

xcache.ttl   =                 86400

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 加速情况配置:

        执行 PHP 命令,查看缓存的生效情况:

[root@lnmp01 lib]# /application/php/bin/php -v

PHP Warning:  Cannot load module 'XCache' because conflicting module 'eAccelerator' is already loaded in Unknown on line 0           

        上面提示说 XCache 和 eaccelerator 冲突。在实际工作中,这两个软件可以任选其一。此时可以把 eacclerator 的配置参数删除,保留 XCache 参数。

[root@lnmp01 lib]# /bin/cp php.ini php.ini_include_eacc_xcache  #  备份。   

[root@lnmp01 lib]# sed -n '1924,1938p' php.ini     #  取出 eacclerator 在 php.ini 的配置。

[eaccelerator]

extension=eaccelerator.so

eaccelerator.shm_size="64"

eaccelerator.cache_dir="/tmp/eaccelerator"

eaccelerator.enable="1"

eaccelerator.optimizer="1"

eaccelerator.check_mtime="1"

eaccelerator.debug="0"

eaccelerator.filter=""

eaccelerator.shm_max="0"

eaccelerator.shm_ttl="3600"

eaccelerator.shm_prune_period="3600"

eaccelerator.shm_only="0"

eaccelerator.compress="1"

eaccelerator.compress_level="9"

[root@lnmp01 lib]# sed -i '1924,1938d' php.ini     #  确保无错误后用 sed 删除。

[root@lnmp01 lib]# /application/php/bin/php -v     

#  再次执行 PHP 命令,输出结果表示配置成功。

PHP 5.3.27 (cli) (built: Dec 23 2017 16:24:25)

Copyright (c) 1997-2013 The PHP Group

Zend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies

    with XCache v3.2.0, Copyright (c) 2005-2014, by mOo

    with XCache Cacher v3.2.0, Copyright (c) 2005-2014, by mOo

        XCache 和 eacclerator 均使用系统的共享内存作为存储空间,因此有必要调整系统的共享内存大小参数:

[root@lnmp01 lib]# tail /etc/sysctl.conf

kernel.msgmnb = 65536

# Controls the maximum size of a message, in bytes

kernel.msgmax = 65536

# Controls the maximum shared segment size, in bytes

kernel.shmmax = 68719476736

# Controls the maximum number of shared memory segments, in pages

kernel.shmall = 4294967296

        重启 PHP 服务,然后通过 phpinfo 界面检查 XCache 插件结果,如下所示:

 

        配置 Web 界面查看 XCache 缓存加速信息:

        使用 md5sum 命令,通过输入字符串生成 XCache 管理员的密码:

[root@lnmp01 lib]# echo -n "123456"|md5sum

e10adc3949ba59abbe56e057f20f883e  -

        编辑 php.ini 文件,在结尾的 XCache 配置部分把这一串密文内容按照如下参数修改:

[root@lnmp01 lib]# vim php.ini

xcache.admin.enable_auth = On

xcache.admin.user = "oldboy"

xcache.admin.pass = "e10adc3949ba59abbe56e057f20f883e"

        然后复制 XCache 软件下面的缓存加速管理 PHP 程序到站点目录下:

[root@lnmp01 lib]# cd /home/oldboy/tools/xcache-3.2.0

[root@lnmp01 xcache-3.2.0]# cp -a htdocs/ /application/nginx/html/blog/xadmin

[root@lnmp01 xcache-3.2.0]# chown -R nginx.nginx /application/nginx/html/blog/xadmin

[root@lnmp01 xcache-3.2.0]# pkill php-fpm

[root@lnmp01 xcache-3.2.0]# /application/php/sbin/php-fpm

        访问 http://blog.etiantian.org/xadmin/index.php ,弹出验证框,需输入用户和密码:

 

        登陆后的相关信息展示如下所示:

 

        有关缓存 XCache 的状态、命中等相关信息都可以通过这个 XCache 管理界面查看。

配置 ZendOpcache 插件加速:

        配置 ZendOpcache 参数:

        在 php.ini 的最后面加入如下几行:

[opcache]

zend_extension=/application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/opcache.so

;extension=opcache.so

opcache.memory_consumption=32

opcache.interned_strings_buffer=8

opcache.max_accelerated_files=1000

opcache.revalidate_freq=60

opcache.fast_shutdown=1

opcache.enable_cli=1

        检查配置文件,查看配置结果:

[root@lnmp01 lib]# tail php.ini   

[opcache]

zend_extension=/application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/opcache.so

;extension=opcache.so

opcache.memory_consumption=32

opcache.interned_strings_buffer=8

opcache.max_accelerated_files=1000

opcache.revalidate_freq=60

opcache.fast_shutdown=1

opcache.enable_cli=1

        检查 ZendOpcache 生效情况:

[root@lnmp01 lib]# /application/php/bin/php -v

PHP 5.3.27 (cli) (built: Dec 23 2017 16:24:25)

Copyright (c) 1997-2013 The PHP Group

Zend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies

    with XCache v3.2.0, Copyright (c) 2005-2014, by mOo

    with Zend OPcache v7.0.5, Copyright (c) 1999-2015, by Zend Technologies

    with XCache Cacher v3.2.0, Copyright (c) 2005-2014, by mOo

        可以看到 ZendOPcache 已经生效,并且貌似和 XCache 相处的比较融洽。工作中慎重选择。现在重启 PHP 服务,并通过 phpinfo 界面查看 XCache 插件结果:

 

        ZendOPcache 配置参数说明:详见<< Web 集群实战 P277 >>

        说明:ZendOPcache 是 PHP 官方的新一代缓存加速软件,PHP 5.5 以前可以通过 ZendOPcache 软件以插件的方式安装,从 PHP 5.5 版本开始已经整合到 PHP 软件里,编译时只需要指定一个参数即可(--enable-opcache)。

        ZendOPcache 可能是未来的首选,现在的稳定性还有待检验。PHP 5.5 及以上版本的安装编译完整参数:详见 << Web 集群实战 P278 >>。

补充知识:

        安装 PHP 扩展插件的时候,常常会有这样一条命令:/application/php/bin/phpize。事实上,phpize 是用来扩展 PHP 扩展模块的。比如想在原来编译好的 PHP 中加入 Memcache 等扩展模块,可以使用 phpize 工具。

        编译 PHP 后,其 bin 目录下会有 phpize 这个脚本文件。在编译要添加的扩展模块之前,执行一下 phpize 就可以了。

        PHP 指定 MySQL 的编译参数带来的问题:详见 <<  Web 集群实战 P280 >>。

猜你喜欢

转载自www.cnblogs.com/alinuxer/p/9896545.html