1 缓存加速器介绍和环境准备
1.1 操作码介绍及缓存原理
当客户端请求一个PHP程序时,服务器的PHP引擎会解析该PHP程序,并将其编译为特定的操作码(Operate Code;简称opcode)文件,默认情况下这个编译好的操作码文件有PHP引擎执行后丢弃;而操作码缓存的原理就是将编译后的操作码保存下来,并放到共享内存里,以便下一次调用该PHP页面时重用它,避免了相同代码的重复编译
1.2 LAMP 缓存加速器的原理
Apache服务是用libphp5.so响应处理PHP程序请求的,流程大概如下:
1、Apache接收客户的PHP请求,根据规则过滤
2、传给PHP处理模块libphp5.so
3、PHP引擎定位PHP文件,将其加载到内存中解析
4、libphp5.so将代码编译成opcode
5、libphp5.so执行opcode,然后缓存
6、当Apache接收到新的PHP程序请求,PHP引擎直接读取缓存执行opcode文件,省去了第4步操作
PHP缓存加速器解决的就是第5步的问题,会把opcode保存起来
1.3 LNMP缓存加速器原理
与LAMP类似,只不过PHP引擎不再使用libphp5.so,而是启用了独立的FCGI(php-fpm)
1.4 PHP缓存加速器软件选择
XCache、ZendOpcache
1.5 PHP缓存加速器安装环境准备
LNMP环境准备及软件版本查看
[root@lnmp02 ~]# cat /etc/redhat-release CentOS release 6.5 (Final) [root@lnmp02 ~]# /application/nginx/sbin/nginx -vnginx version: nginx/1.6.3 [root@lnmp02 ~]# /application/php/bin/php -vPHP 5.3.27 (cli) (built: Jun 25 2017 22:07:33)Copyright (c) 1997-2013 The PHP GroupZend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies [root@mysql-server ~]# mysqladmin -uroot -wangxian versionGot error: Access denied for user 'root'@'localhost' (using password: NO)[root@mysql-server ~]# mysqladmin -uroot -pwangxian versionmysqladmin Ver 8.42 Distrib 5.5.32, for linux2.6 on x86_64Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners. Server version 5.5.32Protocol version 10Connection Localhost via UNIX socketUNIX socket /tmp/mysql.sockUptime: 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/profileexport LC_ALL=C[root@mysql-server ~]# source /etc/profile[root@mysql-server ~]# echo $LC_ALLC2、安装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.bz2eaccelerator-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/phpizeConfiguring for:PHP Api Version: 20090626Zend Module Api No: 20090626Zend 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.bz2xcache-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/phpizeConfiguring for:PHP Api Version: 20090626Zend Module Api No: 20090626Zend 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/phpizeConfiguring for:PHP Api Version: 20090626Zend Module Api No: 20090626Zend 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 installInstalling 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的意思,表示服务器端进程模式服务
LNMP下memcached客户端缓存工作原理图
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: 20090626Zend Module Api No: 20090626Zend 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/lsrz -yls -l ImageMagick-6.7.9-9.tar.xztar xf ImageMagick-6.7.9-9.tar.xzcd ImageMagick-6.7.9-9./configuremake && 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.so、opcache.so、xcache.so是同类软件,生产环境安装一种即可,否则可能会引起冲突;memcache.so是数据库缓存软件;
pdo_mysql.so、imagick.so是功能软件;可选择安装。
5 配置memcache/PDO_MYSQL/imagick模块
修改PHP的配置文件
[root@lnmp02 imagick-2.3.0]# cd /application/php/lib/[root@lnmp02 lib]# lsphp 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]# lsphp 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 20180401extension = memcache.soextension = pdo_mysql.soextension = 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 -l3
编写测试文件,增加PHP首页文件
[root@lnmp02 lib]# cd /application/nginx/conf/extra/[root@lnmp02 extra]# lsbbs.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
浏览器测试
用Ctrl+F搜索pdo_mysql imagick memcache查看3个模块是否生效
配置完毕
6 配置Xcache插件加速(eaccelerator、Zendopcache略)
修改php.ini配置Xcache
[root@lnmp02 ~]# cd /application/php/lib/[root@lnmp02 lib]# lsphp 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.inixcache.size = 60M 修改为256Mxcache.count = 1 2xcache.ttl = 0 86400xcache.gc_interval = 0 3600xcache.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 = Onxcache.admin.user = "mOo"xcache.admin.pass = "md5 encrypted password"[xcache]xcache.shm_scheme = "mmap"xcache.size = 256Mxcache.count = 2xcache.slots = 8Kxcache.ttl = 86400xcache.gc_interval = 3600xcache.var_size = 64Mxcache.var_count = 1xcache.var_slots = 8Kxcache.var_ttl = 0xcache.var_maxttl = 0xcache.var_gc_interval = 300xcache.var_namespace_mode = 0xcache.var_namespace = ""xcache.readonly_protection = Offxcache.mmap_path = "/dev/zero"xcache.coredump_directory = ""xcache.coredump_type = 0xcache.disable_on_crash = Offxcache.experimental = Offxcache.cacher = Onxcache.stat = Onxcache.optimizer = Off[xcache.coverager]xcache.coverager = Offxcache.coverager_autostart = Onxcache.coveragedump_directory = ""
检查Xcache加速情况配置
[root@lnmp02 lib]# /application/php/bin/php -vPHP 5.3.27 (cli) (built: Jun 25 2017 22:07:33)Copyright (c) 1997-2013 The PHP GroupZend 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和eAccelerator都使用系统的共享内存作为存储空间,因此有必要调整系统的共享内存大小参数,调整如下:
[root@lnmp02 lib]# tail /etc/sysctl.conf kernel.msgmnb = 65536 # Controls the maximum size of a message, in byteskernel.msgmax = 65536 # Controls the maximum shared segment size, in byteskernel.shmmax = 68719476736 # Controls the maximum number of shared memory segments, in pageskernel.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 -l3
打开搜索Xcache查看
配置web界面查看Xcache缓存加速信息
配置帐号密码
[root@lnmp02 lib]# echo -n "123456"|md5sume10adc3949ba59abbe56e057f20f883e -[root@lnmp02 lib]# vim php.inixcache.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访问输入帐号密码登录查看相关信息
7 phpize是什么
是用来扩展PHP扩展模块的,通过phpize可以建立PHP的外挂模块。比如想在原来编译好的PHP中加入memcached等扩展模块,可以使用phpize工具