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 -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的意思,表示服务器端进程模式服务
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: 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.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]# 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插件加速(eaccelerator、Zendopcache略)
修改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
Xcache和eAccelerator都使用系统的共享内存作为存储空间,因此有必要调整系统的共享内存大小参数,调整如下:
[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工具