1 缓存加速器介绍和环境准备

1.1 操作码介绍及缓存原理

当客户端请求一个PHP程序时,服务器的PHP引擎会解析该PHP程序,并将其编译为特定的操作码(Operate Code;简称opcode)文件,默认情况下这个编译好的操作码文件有PHP引擎执行后丢弃;而操作码缓存的原理就是将编译后的操作码保存下来,并放到共享内存里,以便下一次调用该PHP页面时重用它,避免了相同代码的重复编译

1.2 LAMP 缓存加速器的原理

Apache服务是用libphp5.so响应处理PHP程序请求的,流程大概如下:

1Apache接收客户的PHP请求,根据规则过滤

2、传给PHP处理模块libphp5.so

3PHP引擎定位PHP文件,将其加载到内存中解析

4libphp5.so将代码编译成opcode

5libphp5.so执行opcode,然后缓存

6、当Apache接收到新的PHP程序请求,PHP引擎直接读取缓存执行opcode文件,省去了第4步操作

PHP缓存加速器解决的就是第5步的问题,会把opcode保存起来

1.3 LNMP缓存加速器原理

LAMP类似,只不过PHP引擎不再使用libphp5.so,而是启用了独立的FCGIphp-fpm

1.4 PHP缓存加速器软件选择

XCacheZendOpcache

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

LNMP环境准备及软件版本查看
[root@lnmp02 ~]# cat /etc/redhat-release        
CentOS release 6.5 (Final)
 
[root@lnmp02 ~]# /application/nginx/sbin/nginx -v
nginx version: nginx/1.6.3
 
[root@lnmp02 ~]# /application/php/bin/php -v
PHP 5.3.27 (cli) (built: Jun 25 2017 22:07:33)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies
 
[root@mysql-server ~]# mysqladmin -uroot -wangxian  version
Got error: Access denied for user 'root'@'localhost' (using password: NO)
[root@mysql-server ~]# mysqladmin -uroot -pwangxian  version
mysqladmin  Ver 8.42 Distrib 5.5.32, for linux2.6 on x86_64
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
 
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
 
Server version          5.5.32
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /tmp/mysql.sock
Uptime:                 1 hour 49 min 49 sec
 
Threads: 1  Questions: 742  Slow queries: 0  Opens: 219  Flush tables: 2  Open tables: 0  Queries per second avg: 0.112
解决部分加速软件的Perl编译问题
1、配置环境变量LC_ALL
[root@mysql-server ~]# echo 'export LC_ALL=C'>>/etc/profile
[root@mysql-server ~]# tail -1 /etc/profile
export LC_ALL=C
[root@mysql-server ~]# source /etc/profile
[root@mysql-server ~]# echo $LC_ALL
C
2、安装Perl相关软件依赖
yum –y install perl-devel

2 安装PHP缓存加速器扩展

2.1 安装PHP eAccelerator缓存加速模块

eAccelerator是一个免费的开源的PHP加速、优化及缓存的扩展插件软件,可以降低PHP程序在编译解析时对服务器的性能开销


[root@lnmp02 ~]# cd /home/wangxin/tools/
[root@lnmp02 tools]# ls eaccelerator-0.9.6.1.tar.bz2
eaccelerator-0.9.6.1.tar.bz2
[root@lnmp02 tools]# tar xf eaccelerator-0.9.6.1.tar.bz2
[root@lnmp02 tools]# cd eaccelerator-0.9.6.1
[root@lnmp02 eaccelerator-0.9.6.1]# /application/php/bin/phpize
Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626
[root@lnmp02 eaccelerator-0.9.6.1]# ./configure --enable-eaccelerator=shared --with-php-config=/application/php/bin/php-config   #configure的参数路径一定要配置正确
[root@lnmp02 eaccelerator-0.9.6.1]# make
[root@lnmp02 eaccelerator-0.9.6.1]# make install
[root@lnmp02 eaccelerator-0.9.6.1]# echo $?
0
[root@lnmp02 tools]# ls /application/php/lib/php/extensions/no-debug-non-zts-20090626/
eaccelerator.so                  #最后生成这个模块表示安装成功


如果安装出现cannot find config.m4错误,需要切换到eaccelerator路径下执行/application/php/bin/phpize

2.2 安装PHP XCache缓存加速模块

XCache是一个开源的、稳定的PHP opcode缓存器/优化器


[root@lnmp02 tools]# cd /home/wangxin/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
Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626
[root@lnmp02 xcache-3.2.0]# ./configure --enable-xcache --with-php-config=/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 -l /application/php/lib/php/extensions/no-debug-non-zts-20090626/
total 1052
-rwxr-xr-x 1 root root 417077 Mar 27 20:37 eaccelerator.so
-rwxr-xr-x 1 root root 658484 Mar 27 20:51 xcache.so   #最后生成此模块表示安装成功


2.3 PHP官方加速插件ZendOpcache

[root@lnmp02 xcache-3.2.0]# cd /home/wangxin/tools/
[root@lnmp02 tools]# wget http://pecl.php.net/get/zendopcache-7.0.5.tgz
[root@lnmp02 tools]# tar xf zendopcache-7.0.5.tgz
[root@lnmp02 tools]# cd zendopcache-7.0.5
[root@lnmp02 zendopcache-7.0.5]# /application/php/bin/phpize
Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626
[root@lnmp02 zendopcache-7.0.5]# ./configure --enable-opcache --with-php-config=/application/php/bin/php-config
[root@lnmp02 zendopcache-7.0.5]# make
[root@lnmp02 zendopcache-7.0.5]# make install
Installing shared extensions:     /application/php-5.3.27/lib/php/extensions/no-debug-non-zts-20090626/
[root@lnmp02 zendopcache-7.0.5]# ls -l /application/php/lib/php/extensions/no-debug-non-zts-20090626/
total 1536
-rwxr-xr-x 1 root root 417077 Mar 27 20:37 eaccelerator.so
-rwxr-xr-x 1 root root 491830 Mar 27 21:03 opcache.so    #生成此模块,表示安装成功
-rwxr-xr-x 1 root root 658484 Mar 27 20:51 xcache.so

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

3.1 安装PHP Memcached扩展插件

Memcached介绍

Memcached是一个开源的、支持高性能、高并发及分布式的内存缓存服务软件,最后的字符d,是daemon的意思,表示服务器端进程模式服务


LNMPmemcached客户端缓存工作原理图

memcached服务的工作流程:

1、程序首先检查客户端请求的数据在memcached服务的缓存中是否存在,如果在,直接把请求数据返回

2、若不在,则程序会去memcached后端的数据库服务

3、把从数据库中取到的数据返回给客户端

4、同时把新取到的数据缓存一份到memcached服务缓存中。

memcached缓存php扩展插件安装

[

root@lnmp02 zendopcache-7.0.5]# cd /home/wangxin/tools/
[root@lnmp02 tools]# wget -q http://pecl.php.net/get/memcache-2.2.7.tgz
[root@lnmp02 tools]# tar xf memcache-2.2.7.tgz
[root@lnmp02 tools]# cd memcache-2.2.7
[root@lnmp02 memcache-2.2.7]# /application/php/bin/phpize    
Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626
[root@lnmp02 memcache-2.2.7]# ./configure  --enable-memcache --with-php-config=/application/php/bin/php-config
[root@lnmp02 memcache-2.2.7]# make && make install
[root@lnmp02 memcache-2.2.7]# ls -l /application/php-5.3.27/lib/php/extensions/no-debug-non-zts-20090626/
total 1780
-rwxr-xr-x 1 root root 417077 Mar 27 20:37 eaccelerator.so
-rwxr-xr-x 1 root root 246744 Mar 31 21:06 memcache.so     #安装成功
-rwxr-xr-x 1 root root 491830 Mar 27 21:03 opcache.so
-rwxr-xr-x 1 root root 658484 Mar 27 20:51 xcache.so

3.2 安装PDO_MYSQL扩展插件模块

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

[root@lnmp02 ~]# cd /home/wangxin/tools/
[root@lnmp02 tools]# wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz
[root@lnmp02 tools]# tar xf PDO_MYSQL-1.0.2.tgz
[root@lnmp02 tools]# cd PDO_MYSQL-1.0.2
[root@lnmp02 PDO_MYSQL-1.0.2]# /application/php/bin/phpize
[root@lnmp02 PDO_MYSQL-1.0.2]# ./configure --with-php-config=/application/php/bin/php-config --with-pdo-mysql=/application/mysql    #mysql的安装路径要正确
[root@lnmp02 PDO_MYSQL-1.0.2]# make && make install
[root@lnmp02 PDO_MYSQL-1.0.2]# ls -l /application/php/lib/php/extensions/no-debug-non-zts-20090626/
total 1936
-rwxr-xr-x 1 root root 417077 Mar 27 20:37 eaccelerator.so
-rwxr-xr-x 1 root root 246744 Mar 31 21:06 memcache.so
-rwxr-xr-x 1 root root 491830 Mar 27 21:03 opcache.so
-rwxr-xr-x 1 root root 156012 Mar 31 23:20 pdo_mysql.so  《==安装成功
-rwxr-xr-x 1 root root 658484 Mar 27 20:51 xcache.so

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

安装ImageMagick图像软件

ImageMagick是一套功能强大、稳定、免费的工具集,能处理多种格式的图片文件,常见功能:

对图片进行格式转换;

改变图片尺寸、设置图片特效;

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

将图片做成gif,组合图片,加边框,取得一些图片特性信息等等

 

安装过程

cd /home/wangxin/tools/
ls
rz -y
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

 

安装imagick PHP扩展插件

imagick插件工作需要ImageMagick软件的支持,所以必须先装ImageMagick

安装过程:

[root@lnmp02 ImageMagick-6.7.9-9]# cd /home/wangxin/tools/
[root@lnmp02 tools]# wget http://pecl.php.net/get/imagick-2.3.0.tgz
[root@lnmp02 tools]# tar xf imagick-2.3.0.tgz
[root@lnmp02 tools]# cd imagick-2.3.0
[root@lnmp02 imagick-2.3.0]# /application/php/bin/phpize
[root@lnmp02 imagick-2.3.0]# ./configure --with-php-config=/application/php/bin/php-config
[root@lnmp02 imagick-2.3.0]# make && make install
[root@lnmp02 imagick-2.3.0]# ls -l /application/php/lib/php/extensions/no-debug-non-zts-20090626/
total 2984
-rwxr-xr-x 1 root root  417077 Mar 27 20:37 eaccelerator.so
-rwxr-xr-x 1 root root 1073049 Apr  1 00:08 imagick.so
-rwxr-xr-x 1 root root  246744 Mar 31 21:06 memcache.so
-rwxr-xr-x 1 root root  491830 Mar 27 21:03 opcache.so
-rwxr-xr-x 1 root root  156012 Mar 31 23:20 pdo_mysql.so
-rwxr-xr-x 1 root root  658484 Mar 27 20:51 xcache.so

6个扩展模块全部安装完毕,eaccelerator.soopcache.soxcache.so是同类软件,生产环境安装一种即可,否则可能会引起冲突;memcache.so是数据库缓存软件;

pdo_mysql.soimagick.so是功能软件;可选择安装。

5 配置memcache/PDO_MYSQL/imagick模块

修改PHP的配置文件

[root@lnmp02 imagick-2.3.0]# cd /application/php/lib/
[root@lnmp02 lib]# ls
php  php.ini
[root@lnmp02 lib]# cat php.ini |grep extension_dir
; extension_dir = "./"
备份
[root@lnmp02 lib]# /bin/cp php.ini php.ini.bak_0401   
[root@lnmp02 lib]# ls
php  php.ini  php.ini.bak_0401
修改路径
[root@lnmp02 lib]# sed -i 's#extension_dir = "./"#extension_dir = "/application/php-5.3.27/lib/php/extensions/no-debug-non-zts-20090626/"#g' php.ini                         
[root@lnmp02 lib]# grep "extension_dir =" php.ini
; extension_dir = "/application/php-5.3.27/lib/php/extensions/no-debug-non-zts-20090626/"
; extension_dir = "ext"
;sqlite3.extension_dir =
增加模块的参数
[root@lnmp02 lib]# vim /application/php/lib/php.ini
;----cache ext start by wangxian 20180401
extension = memcache.so
extension = pdo_mysql.so
extension = imagick.so
;----cache ext end by wangxian 20180401
; End:

重启PHP服务,并检查测试

重启PHP
[root@lnmp02 lib]# pkill php-fpm
[root@lnmp02 lib]# ps -ef|grep php-fpm|grep -v grep
[root@lnmp02 lib]# /application/php/sbin/php-fpm
[root@lnmp02 lib]# ps -ef|grep php-fpm|grep -v grep|wc -l
3
编写测试文件,增加PHP首页文件
[root@lnmp02 lib]# cd /application/nginx/conf/extra/
[root@lnmp02 extra]# ls
bbs.conf  blog.conf  status.conf  www.conf
[root@lnmp02 extra]# cat blog.conf
     server {
        listen       80;
        server_name  blog.etiantian123.org;
        location / {
            root   html/blog;
            index  index.php index.html index.htm;   《===增加index.php
        }
        location ~ .*\.(php|php5)?$ {
            root html/blog;
            fastcgi_pass  127.0.0.1:9000;
            fastcgi_index index.php;
            include fastcgi.conf;
        }
    }
[root@lnmp02 blog]# cat test_info.php
<?php phpinfo(); ?>
浏览器测试

http://blog.etiantian123.org/test_info.php

Ctrl+F搜索pdo_mysql imagick memcache查看3个模块是否生效

配置完毕

6 配置Xcache插件加速(eacceleratorZendopcache略)

修改php.ini配置Xcache
[root@lnmp02 ~]# cd /application/php/lib/
[root@lnmp02 lib]# ls
php  php.ini  php.ini.bak_0401
[root@lnmp02 lib]# echo  >>php.ini
[root@lnmp02 lib]# echo ';xcache config by wangxian----------------' >>php.ini
[root@lnmp02 lib]# tail -2 php.ini
 
;xcache config by wangxian----------------
修改Xcache参数
[root@lnmp02 xcache-3.2.0]# vim /home/wangxin/tools/xcache-3.2.0/xcache.ini
xcache.size  =               60M     修改为256M
xcache.count =                 1              2
xcache.ttl   =                 0             86400
xcache.gc_interval =            0              3600
xcache.var_size  =            4M             64M

 

将修改后的xcache.ini合并到php.ini结尾
[root@lnmp02 lib]#  cat /home/wangxin/tools/xcache-3.2.0/xcache.ini >> php.ini
检查
[root@lnmp02 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加速情况配置
[root@lnmp02 lib]# /application/php/bin/php -v
PHP 5.3.27 (cli) (built: Jun 25 2017 22:07:33)
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

XcacheeAccelerator都使用系统的共享内存作为存储空间,因此有必要调整系统的共享内存大小参数,调整如下:

[root@lnmp02 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插件结果
[root@lnmp02 lib]# pkill php-fpm
[root@lnmp02 lib]# ps -ef|grep php-fpm|grep -v grep
[root@lnmp02 lib]# /application/php/sbin/php-fpm
[root@lnmp02 lib]# ps -ef|grep php-fpm|grep -v grep|wc -l
3

打开http://blog.etiantian123.org/test_info.php搜索Xcache查看

配置web界面查看Xcache缓存加速信息

配置帐号密码

[root@lnmp02 lib]# echo -n "123456"|md5sum
e10adc3949ba59abbe56e057f20f883e  -
[root@lnmp02 lib]# vim php.ini
xcache.admin.user = "wangxian"
xcache.admin.pass = "e10adc3949ba59abbe56e057f20f883e"

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

[root@lnmp02 lib]# cd /home/wangxin/tools/xcache-3.2.0
[root@lnmp02 xcache-3.2.0]# cp -a htdocs/ /application/nginx/html/blog/xadmin
[root@lnmp02 xcache-3.2.0]# chown -R nginx.nginx  /application/nginx/html/blog/xadmin            
[root@lnmp02 xcache-3.2.0]# pkill php-fpm
[root@lnmp02 xcache-3.2.0]# /application/php/sbin/php-fpm

Web访问http://blog.etiantian123.org/xadmin/index.php输入帐号密码登录查看相关信息

7 phpize是什么

是用来扩展PHP扩展模块的,通过phpize可以建立PHP的外挂模块。比如想在原来编译好的PHP中加入memcached等扩展模块,可以使用phpize工具