一、 安装php引擎缓存加速器
1. php缓存加速器介绍
操作码缓存介绍
请求一个PHP程序时,PHP引擎会解析该程序,并将其编译为特定操作码,这是要执行的代码的一种二进制表示形式。随后,此操作码由PHP引擎执行并丢弃.操作码缓存将保存这个编译后的操作码,并在下一次调用该页面时重用它。这会节省很多重复编译的时间。
为了提高PHP引擎的执行效率,PHP缓存加速器设计的目的是缓存PHP解析过的操作码,这样同样的请求访问过来,PHP引擎就不需要解析转换了,可以直接调用PHP的作码,这样就提高了web服务的响应速度,从而提升了用户的访问体验。
在*LAMP*环境中使用的是libphp5.so响应并处理php程序的请求、响应执行的流程大概如下:
Ø apache接收客户php程序请求
Ø apache将php程序请求程序传递给libphp5.so
Ø libphp5.so定位磁盘上的php文件,并加载到内存中。
Ø libphp5.so编译源代码成为opcode树。
Ø libphp5.so执行opcode树
在*LNMP*环境中,php引擎不在使用libphp5.so模块了,而是独立启动了FCGI进程,监听响应并处理php程序的请求、响应执行的流程大概如下:
Ø Nginx接收客户php程序请求
Ø Nginx根据扩展名判断将php程序请求传递给解析PHP的FCGI
Ø PHP FPM进程读取站点磁盘上的php文件,并加载到内存中
Ø PHP FPM编译PHP源代码成为opcode树
Ø PHP FPM的引擎执行opcode树进程
PHP缓存加速器解决的就是上述第4步问题,将opcode内容进行缓存,目的是防止PHP每次请求都里复编译解析PHP程序代码,因为在高访问量的网站上,大量的重复编译会消耗很多资源和事件,所以这里面的瓶颈就是PHP的里复编译既影响了响应速度,又加重了服务器的负载,为了解决此问题,PHP加速器就这样诞生了。
*php缓存加速器种类*
eaccelerator、xcache、Zend、apc
建议选择eaccelerator、xcache,二选一,xcache>eaccelerator
*原因:xcache更快、开发更活跃。*
2. *php缓存加速器安装环境准备*
lamp/lnmp基础web环境准备
在安装php扩展及缓存加速之前,需要安装好lamp/lnmp的基本环境,例如:看见出现phpinfo的界面为确认php的正常安装,同时最好可以编写一个调用数据库的程序,例如:test_mysql.php,确认MySQL数据库也是正常的.在前面的课程里,我们己经详细讲解了lamp/lnmp的安装及配置及产品应用
*查看lanmp各编译参数*
/application/nginx/sbin/nginx -V #nginx
cat /application/apache/build/config.nice #Apache
/application/php/bin/php -i| grep configure #php
grep CONFIGURE_LINE /application/mysql/bin/mysqlbug #mysql5.5之前
VISUAL=vim; export VISUAL;/application/mysql/bin/mysqlbug #mysql5.5之后
*安装perl相关库*
yum install perl-CPAN -y
*解决perl编译问题**
echo $LC_ALL
echo 'export LC_ALL=C' >> /etc/profile
source /etc/profile
echo $LC_ALL
*此节不操作可能会遇到如下问题*
[root@apache ~]# /usr/local/webserver/php/bin/phpize
Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20060613
Zend Extension Api No: 220060519
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LANG = "zh_CN.GB2312;zh_CN.UTF-8;en_US;en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LANG = "zh_CN.GB2312;zh_CN.UTF-8;en_US;en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
3. *安装php eaccelerator缓存加速模块*
*eaccelerator缓存加速插件说明*
*A PHP opcode cache / optimizer / accelerator*
eaccelerator是一个自由的开放源代码的php加速、优化和动态内容缓存的扩展模块,它可以提升php程序的缓存性能,降低PHP程序在解析时对服务器的性能开销。eaccelerator还有对PHP优化的作用,加快其执行效率。使PHP程序代码执效率能提高1-10倍。
eAccelerator的前身其实是truk-mmcache,因为开发truk-mmcache的人被Zend给招安了,所以开发已Accelerator的人继承了truk-mmcache的一些特性,设计出eAccelerator加速器。
无论如何在系统上安装eAccelerator,都有一些配里选项需要注意。配里文件通常是/etc/php.d/eacceleotor.ini。eaccelotor.shm_size定义共享高速缓存的大小,编译后的脚本就存储在这里。该值的单位是兆字节(MB)。根据您的应用程序确定恰当的大小。
eAccelerator提供了一个脚本来显示缓存的状态,其中包含内存占用,64MB是个不错的选择(eaccelerator.shm_size="64").如果您选择的值未被接受,那么必须修改内核的最大共享内存的大小.向/etc/sysctl.conf添加kernel.shmmax=67108864,运行sysctl -p来使设置生效。kemel.shmmax值的单位是字节。
如果共享内存的分配超出极限,eAccelerator必须将旧脚本从内存中清除.默认情况下,这是被禁用的;eaccelerator.shm_ttl="60"指定:当eAccelerator用完共享内存时,60秒内未被访问的所有脚本都将被清除。
另一种流行的eaccelerator替代工具是Alternative PHP cache(APC)。zend的厂商也提供了一种商业操作码缓存。
Check out the documentation at http://github.com/eaccelerator/eaccelerator/wiki
The mailing list is available at http://groups.google.com/group/eaccelerator
*eaccelerator缓存加速插件安装*
phpize是用来扩展php扩展模块的,通过phpize可以建立php的外挂模块
cd /server/tools/
rz上传nginx-php-ext-soft.zip工具包
unzip nginx-php-ext-soft.zip
cd nginx-php-ext-soft
tar jxf 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 ..
ll /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/
4. *安装xcache缓存加速模块*
*xcache插件说明*
xcache是一个又快又稳定的PHP opcode缓存器。经过良好的测试并在大流量/高负载的生产机器上稳定运行.经过(在linux上)测试并支持所有现行PHP分支的最新发布版本,如PHP_4_3 PHP_4_4 PHP_5_0 PHP_5_1 PHP_5_2 HEAD(6.x),并支持线程安全/Windows,与同类opcode缓存器相比更胜一筹,比如能够快速跟进PHP版本.详情请参http://xcache.lighttpd.net。
*Xcahce的2个特点:*
将PHP代码进行编译(表现类似于.NET和JAVA的编译,内部机制不同),这样可以不用重复读取PHP文件,加速整个程序的运行效率;
可以缓存数据到内存中,直接可以用,例如你的一些不会经常改动的数据,只用一次从数据库读取出来后保存到Xcache中,就不用再去读取数据库了(理想环境下)。
*xcache插件安装*
tar jxf xcache-1.3.2.tar.bz2
cd xcache-1.3.2
/application/php/bin/phpize
./configure --enable-xcache --with-php-config=/application/php/bin/php-config
make
make install
ll /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/
cd ..
5. *安装zend缓存及加速扩展模块*
n *zend缓存及加速插件说明*
Zend Optimizer使用优化代码的方法来提高*PHPv5.1-v5.2*应用程序的执行速度。实现的原理是对那些在被最终执行之前由运行编译器(run-Time compiler)产生的代码进行优化。一般情况下,执行使用Zend Optimizer的PHP程序比不使用的要快40%到100%:这意味着网站的访问者可以更快的浏览网页,从而完成更多的事务,创造更好的客户满意度。
更快的响应同时也意味着可以书省硬件投资,并增强网站所提供的服务。zend OPtimizer能给PHP用户带来很多益处,特别是那些运营网站的人。快速运行PHP程序可以显著降低服务器的CPU负载,并可以减少一半的反应时间,也就是从访问者点击链接到服务器开始读取页面之间的时间。
由于对*PHPv5.2*之后的版本无效安装方法这里不再叙述
6. *安装memcache数据库缓存扩展模块*
n *memcache数据库缓存软件说明*
Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度
Menlcache分为服务端软件(名字如:memcached-1.4.3.tar.gz)和客户端插件(名字如:memcache-2.2.5.tgz)两部分,本文就是客户端插件在php服务中的安装
*memcache数据库缓存软件安装*
tar zxvf memcache-2.2.5.tgz
cd memcache-2.2.5
/application/php/bin/phpize
./configure --with-php-config=/application/php/bin/php-config
make
make install
ll /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/
cd ..
7. *安装PDO_MYSQL扩展模块(非必须)*
*PDO_MYSQL扩展插件说明*
PDO扩展为PHP访问数据库定义了一个轻最级的、一致性的接口,它提供了一个数据访问抽象层,这样,无论使用什么数据库,都可以通过一致的函数执行查询并获取数据。下载地址:http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz(技巧谷歌搜索关键字
n *PDO_MYSQL扩展插件安装*
tar zxf 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
ll /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/
cd ..
注意:如果本地没有安装mysql,可以修改--with-pdo-mysql=mysqlnd,也可以在编译安装php时添加此参数及--with-mysql=mysqlnd #有待测试
\注意:如果本地没有安装mysql,可以修改******--with-pdo-mysql=****mysqlnd,也可以在编译安装php时添加此参数及****--with-mysql=****mysqlnd #有待测试****
8. *安装图像处理程序及imagick扩展模块*
n *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上。
1.将图片从一个格式转换到另一个格式,包括直接转换成图标。
2.改变尺寸、旋转、锐化(sharpen)、减色、图片特效
3.缩略图片的合成图(a montage of image thurnbnails)
4.适于web的背景透明的图片
5.将一组图片作成gif动画,直接convert
6.将几张图片作成一张组合图片,montage
7.在一个图片上写字或画图形,带文字阴影和边框渲染
8.给图片加边框或框架
9.取得一些图片的特性信息
10,几乎包括了gimp可以作到的常规插件功能。甚至包括各种曲线参数的渲染功能.只是那命令的写法,够复杂。
*ImageMagick图像软件安装*
tar zxvf ImageMagick.tar.gz
cd ImageMagick-6.5.1-2
./configure
make
make install
cd ..
如果出现如下情况
Can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at Makefile.PL line 24.
BEGIN failed--compilation aborted at Makefile.PL line 24.
make[1]: *** [PerlMagick/Makefile] Error 2
make[1]: Leaving directory `/home/oldboy/tools/ImageMagick-6.5.1-2'
make: *** [all] Error 2
解决办法:yum install perl-CPAN -y
9. *安装imagick php扩展插件*
*插件说明*
特别提示:imagick插件工作需要ImageMagick软件的支持,所以,必须要先安装ImageMagick,否则会报错。
一个可以供PHP调用ImageMagick功能的PHP扩展。使用这个扩展可以使PHP具备和ImageMagick相同的功能。
装了ImageMagick-6.5.1-2图像程序后,再装php的扩展imagick插件,才能使用ImageMagick-6.5.1-2提供的api来进行图片的创建与修改、压缩等操作,都集成在imagick这个扩展中
*安装imagick php扩展插件*
tar zxvf 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
ll /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/
cd ..
10. *配置php加速缓存扩展模块*
cd /application/php/lib/
cp php.ini php.ini.ori
vim php.ini修改; extension_dir = "./"为
extension_dir = "/application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/"
在配置文件结尾添加如下
extension = memcache.so
extension = pdo_mysql.so
extension = imagick.so
配置完成后对于lamp重启mysql,对于lnmp重启php-fpm
/application/apache/bin/apachectl graceful #重启apache
pkill php-fpm #关闭php-fpm,或者
ps -ef|grep php-fpm|awk '{print $2}'|xargs kill
/application/php/sbin/php-fpm #启动php-fpm
11. \配置eA******ccelerator****插件生效****
mkdir /tmp/eaccelerator
#此目录可以用tmpfs内存文件系统来存储,SSD固态硬盘。
chown -R apache.apache /tmp/eaccelerator #lamp环境
chown -R nginx.nginx /tmp/eaccelerator #lnmp环境
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
\注意:如果配置了zend,那么******[eaccelerator]****段配置要放在zend的内容配置前****
/application/php/bin/php -v #查看是否生效
ls /tmp/eaccelerator/ #查看是否有文件
重启apache或者php-fpm然后访问phpinfo网页发现会有缓存文件
find /tmp/eaccelerator/ -type f
12. *配置xcache插件加速*
*提示:xcache和eaccelerator功能相近,安装一个即可。本文考虑文章完整,作为知识点来讲解。*
echo >>php.ini
echo ';xcache config by oldboy 20120418----------------------' >>php.ini
vi /server/tools/nginx-php-ext-soft/xcache-1.3.2/xcache.ini #仅修改下面几行
3 ;zend_extension = /usr/local/lib/php/extensions/non-debug-non-zts-xxx/xcache.so
6 ;zend_extension_ts = c:/php/extensions/php_xcache.dll
8 extension = xcache.so
25 xcache.size = 128M
31 xcache.ttl = 86400
*注意:生产环境需要根据硬件条件具体修改*
cat /server/tools/nginx-php-ext-soft/xcache-1.3.2/xcache.ini >>/application/php/lib/php.ini
\检查:发现和******eAccelerator****冲突,所以生产场景只用一个****
[root@nginx extra]# /application/php/bin/php -v
PHP Warning: Cannot load module 'XCache' because conflicting module 'eAccelerator' is already loaded in Unknown on line 0
PHP 5.3.27 (cli) (built: May 11 2016 02:36:17)
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
*测试:访问phpinfo文件查看插件信息*
13. *生产环境php扩展插件的安装建议*
*PHP的安装插件表格列表*
PHP EXT module | 说明 | 备注 |
---|---|---|
eaccelerator-0.9.5.2 | 适合php5.3以前的版本,性能优化用 | 可选php扩展插件 |
eaccelerator-0.9.6 | 适合php5.3版本,性能优化用 | 可选php扩展插件 |
ImageMagick.tar.gz | 常用图像处理程序,属功能应用 | 非php扩展插件 |
imagick-2.3.0.tgz | 需要先装图像处理程序,属功能应用 | 可选php扩展插件 |
memcache-2.2.5.tgz | memcache客户端(和服务端要区别) | 可选php扩展插件 |
PDO_MYSQL-1.0.2.tgz | php数据库访问插件,属功能应用 | 可选php扩展插件 |
zendOPtimizer | 性能优化用 | 可选php扩展插件 |
xcache-1.3.2 | 性能优化用 | 可选php扩展插件 |
*生产环境插件的安装建议*
l)功能性插件,如果开发人员没需求,可以暂时不考虑安装,如:PDO_MYSQL、memcache,imagick。
2)优化性插件eaccelerator,xcache,zendOPtimizer,可以任意3选二安装,或安装任一种,具体情况看实际业务需求,及根据实际测试结果来安装。
*PHP加速插件的测试对比*
请求时间(秒) | 单次请求时间(毫秒) | 最大内存占用(MB) | 最小内存占用(MB) | |
---|---|---|---|---|
None | 10.41 | 96.08 | 24 | 24 |
APC | 30.45 | 32.84 | 21 | 21 |
eAccelerator | 31.26 | 31.99 | 23 | 18 |
XCache | 30.28 | 33.02 | 29 | 19 |
*PHP加速器比较结果总结*
1、通过测试得出eAccelerator在请求时间和内存占用综合方面是最好的。
2、通过测试得出使用加速器比无加速器在请求时间快了3倍左右。
3、通过各个官方观察,XCache是更新最快的,这也说明最有发展的。
以上是总结结果,你也许会问我到底用那个加速器好呢?我只能告诉你,首先,用一定比不用好,其次每个加速器还有一些可以调优的参数,所以要根据你的系统环境而定,然后,我个人觉得你可以详细研究下eAccelerator和XCache,这两款潜力还是很大的,
发表评论