PHP优化之Operate Code
操作码介绍及缓存原理
当客户端请求一个PHP程序时,服务器的PHP引擎会解析该PHP程序,并将其编译为特定的操作码文件(Operate Code,opcode),这是要执行的PHP代码的一种二进制表示形式。
默认情况下,这个编译好的操作码文件由PHP引擎执行后丢弃。操作码缓存(Operate Code)的原理就是将这个编译后的操作码保存下来,并放到共享内存里,以便在下次调用该PHP页面时复用,避免了相同代码的重复编译。
节省了PHP引擎重复编译的时间,降低了服务器负载,同时也减少了CPU和内存开销
为了提高PHP引擎的高并发访问及执行速度,产生了一系列的PHP缓存及加速软件。
这些软件设计的目的就是缓存前文提到的PHP引擎解析过的操作码文件,此时,在指定时间若有相同的PHP程序请求访问,就不需要重新解析编译
而是直接调用缓存中的PHP操作码文件,这样就提高了动态Web服务的处理速度,从而提升了用户访问企业网站的整体体
LNMP环境PHP缓存加速器原理详解
在LNMP环境中,PHP引擎不再使用libphp5.so模块,而是启动了独立的FCGI(php-fpm)进程,由它来监听来自Nginx的PHP程序请求,并交给PHP引擎解析处理,整个执行流程大概如下 1、Nginx接收客户端的PHP程序访问请求 2、Nginx根据扩展名等过滤规则将PHP程序请求传递给解析PHP的FCGI进程(php-fpm) 3、php-fpm进程调用PHP解析器读取站点磁盘上的PHP文件,并加载到内存中 4、PHP解释器将PHP程序编译成opcode文件,然后把opcode缓存起来 5、php-fpm引擎执行opcode,返回数据给Nginx,进而返回客户端 6、Nginx接收新的PHP程序请求,php-fpm引擎就会直接读取缓存中的opcode执行,将结果返回,而无需进行第4步操作,从而提升了PHP编译解析效率
PHP缓存加速器软件种类及选择建议xcache, eaccelerator. ZendOpcahce(另外还有APC略)
1、首选xcache 经过测试效率更好,更快 xcache软件开发社区活跃 支持更高版本的php,例如php5.5 php5.6 2、次选eaccelerator 安装配置参数更简单,加速效果不错 文档资料较多,但官方团建的更新较慢,社区不活跃 仅适合php5.4以下的程序 3、ZendOpcahce php官方的新一代加速软件,以后发展潜力可能会很好,php5.5以前的版本可以通过ZendOpcahce软件以插件扩展的方式安装,之后的版本已经整合,编译参数--enable-opcache ZendOpcahce可能是未来的缓存加速首选,现在的稳定性有待检验
PHP缓存加速器安装环境准备
LNMP基础Web环境准备:在安装PHP的扩展及缓存加速之前,需要先装好LNMP的完整环境,即phpinfo及数据库连接测试 CentOS release 6.7 (Final) nginx-1.8.1 MySql5.5.49*64 PHP 5.3.29 有关LNMP环境扩展软件的部署说明——LNMP缓存加速特别提示 不管是Apache的libphp5.so模块方式,还是Nginx的FCGI的PHP服务方式,最后都是通过PHP提供动态程序解析的,因此在PHP引擎上的优化也是一致的,即都是基于PHP(php.ini)的,因此,如无特别说明,本节以后的环境安装和优化均适合。因此Apache服务的学习也可以参考
有关LNMP环境扩展软件的部署说明——LNMP缓存加速特别提示
不管是Apache的libphp5.so模块方式,还是Nginx的FCGI的PHP服务方式,最后都是通过PHP提供动态程序解析的
因此在PHP引擎上的优化也是一致的,即都是基于PHP(php.ini)的,因此,如无特别说明,本节以后的环境安装和优化均适合。因此Apache服务的学习也可以参考
解决部分加速软件的perl编译问题
在下列各软件的安装编译中,如果不解决perl的一些环境问题可能会带来意想不到的错误或警告,为了避免这些问题,需提前解决
1)配置环境变量LC_ALL
#echo "export LC_ALL=C" >>/etc/profile
#tail -1 /etc/profile ==>export LC_ALL=C
#source /etc/profile
#echo $LC_ALL ==>C
如果不设置该变量,在安装某些加速软件时,可能会遇到如下问题
perl :waring: Setting locale failed
perl :waring: Please check that your locale settings
LANGUAGE = (unset)
LC_ALL =(unset)
2)安装perl相关软件依赖
yum install perl-CPAN或yum install perl-devel
#如果不安装,在后面安装ImageMagick时可能会报错,后文安装ImageMagick时有报错说明
eAccelerator缓存加速模块
eAccelerator的最新版本为0.9.6.1,支持PHP5.3及以前5系列的版本 https://github.com/eaccelerator/eaccelerator/downloads 早期的0.9.5版本支持PHP4和PHP5.2以前的版本 eAccelerator缓存加速插件说明 eAccelerator是一个免费、开源的PHP加速、优化及缓存的扩展插件软件,它可以缓存opcode、session数据等,降低PHP程序在编译解析时对服务器的性能开销。
eAccelerator还可以加快PHP程序的执行速度,降低服务器负载压力,使PHP程序代码执行效率能提高1-10倍 eAccelerator会把编译好的PHP程序存放在共享内存,然后每次直接从内存调用执行,可以设定把一些不适合放在内存里缓存的编译结果存储到磁盘上。
默认情况,磁盘和内存缓存都会被eAccelerator使用。 eAccelerator算是一个老牌的缓存加速软件,曾经在结合PHP引擎解析时被广泛使用,成熟稳定,目前代码更新不活跃,因此,使用的企业逐渐较少,但是eAccelerator仍是一款值得信赖的缓存加速软件
eAccelerator安装
# tar -xf eaccelerator-0.9.6.1.tar.bz2
# cd eaccelerator-0.9.6.1
# /usr/local/php/bin/phpize
Configuring for:
PHP Api Version: 20090626
Zend Module Api No: 20090626
Zend Extension Api No: 220090626
# ./configure --enable-eaccelerator=shared --with-php-config=/usr/local/php/bin/php-config
#make
#make install
Installing shared extensions: /usr/local/php5.3.29/lib/php/extensions/no-debug-non-zts-20090626/
# ls /usr/local/php5.3.29/lib/php/extensions/no-debug-non-zts-20090626/
eaccelerator.so
# /usr/local/php/bin/php -v
PHP 5.3.29 (cli) (built: Jan 30 2017 11:48:14)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2014 Zend Technologies
with eAccelerator v0.9.6.1, Copyright (c) 2004-2010 eAccelerator, by eAccelerator
PHP xcache缓存加速模块
xcache缓存加速插件说明 xcache是一个开源,又快又稳定的PHP opcode缓存器/优化器,其项目leader曾经是Lighttpd的开发成员之一。
xcache通过把PHP程序编译后的数据(opcode)缓存到共享内存,避免让相同的程序重复编译。
用户请求PHP程序时,可以直接使用缓存中已编译好的数据,从而提高PHP的访问速度,通常可以提升2-5倍,并大幅降低服务器负载开销。 很多公司在使用xache,它已经能在大流量/高负载的生产环境中稳定运行,与同类opcode缓存器相比在各个方面都更胜一筹。
例如:社区活跃、快读开发、能够快速跟进PHP的版本更新等。 当前稳定版本为3.1.x(支持PHP5.1-5.5)和3.2.x(支持PHP5.1-5.6) 软件详情 http://xcache.lighttpd.net或http://xcache.lighttpd.net/woki/Introduction xcache3.2.x安装 #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 #/usr/local/php/bin/phpize Configuring for: PHP Api Version: 20090626 Zend Module Api No: 20090626 Zend Extension Api No: 220090626 #./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config #make #make install Installing shared extensions: /usr/local/php5.3.29/lib/php/extensions/no-debug-non-zts-20090626/ #ls /usr/local/php5.3.29/lib/php/extensions/no-debug-non-zts-20090626/ eaccelerator.so xcache.so
PHP官方加速插件ZendOpcache
ZendOpcache插件说明 PHP5.5版本后已经集成ZendOpcache,编译安装PHP时加入编译参数--enable-opcache PHP5.2-PHP5.4以插件方式安装(http://pecl.php.net/package/ZendOpcache) Release 7.0.5: PHP Version: PHP version 5.5.0 or older PHP Version: PHP 5.2.0 or newer PEAR Package: PEAR 1.4.0b1 or newer ZendOpcache安装 #wget http://pecl.php.net/get/zendopcache-7.0.5.tgz #tar xf zendopcache-7.0.5.tgz #cd zendopcache-7.0.5 #/usr/local/php/bin/phpize #./configure --enable-opcache --with-php-config=/usr/local/php/bin/php-config #make #make install #ls /usr/local/php5.3.29/lib/php/extensions/no-debug-non-zts-20090626/ eaccelerator.so opcache.so xcache.so ==========5.5及以后编译时为开启的,如未开启 cd /home/tools/php-5.6.22/ext/opcache /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config make make install ==========
数据库缓存Memcached
Memcached缓存软件说明 Memcached是一个开源的、支持高性能、高并发及分布式的内存缓存服务软件。 分为服务器端和客户端:Memcached-xxx和Memcache-xxx Release 3.0.8:(Release 2.2.7:) PHP Version: PHP 4.3.11 or newer PEAR Package: PEAR 1.4.0b1 or newer Memcached的作用 传统场景下,多数web应用都将数据保存到RDBMS中,WWW服务器从中读取数据并在浏览器中显示,但是随着数据量的增大,访问的集中,就会出现RDBMS的负担加重,数据库响应缓慢,网站打开延迟等恶劣影响。 而Memcached是高性能的分布式内存缓存服务,使用Memcached的主要目的是,通过在自身内存中缓存数据库的查询结果,较少数据库访问次数,以提高动态Web应用的速度,提高网站架构的并发能力和可扩展性。 Memcached服务通过在事先规划好的系统内存空间中临时缓存数据库中的各类数据,以达到减少前端业务对数据库的直接高并发访问,从而提升大规模网站集群中动态服务的并发访问能力。
安装PHP Memcache扩展插件
wget http://pecl.php.net/get/memcache-2.2.7.tgz
tar -zxf memcache-2.2.7.tgz
cd memcache-2.2.7
/usr/local/php/bin/phpize
./configure --enable-memcache --with-php-config=/usr/local/php/bin/php-config
make
make install
ls /usr/local/php5.3.29/lib/php/extensions/no-debug-non-zts-20090626/
eaccelerator.so memcache.so opcache.so xcache.so
提示
如果安装的是mencache-2.2.4,可能会报错:make:***[memcache.lo] Error 1
解决方法:cp memcache.loT memcache.lo
PDO_MYSQL扩展模块
PDO_MYSQL扩展插件说明: PDO扩展为PHP访问数据库定义了一个轻量级一致性接口,它提供了一个数据访问抽象层,这样,无论使用的是什么数据库,都可以通过一致的函数执行查询并获取数据 PDO_MYSQL的安装方法:
一种是插件安装,
另一种是编译PHP时直接指定PHP对应PDO_MYSQL的编译参数--with-pdo-mysql=mysqlnd PDO_MYSQL扩展插件安装 wget -q http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz tar -xf PDO_MYSQL-1.0.2.tgz cd PDO_MYSQL-1.0.2 /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-mysql=/usr/local/mysql #如果未安装mysql,可以拷贝个mysql二进制包 make make install ls /usr/local/php5.3.29/lib/php/extensions/no-debug-non-zts-20090626/ eaccelerator.so memcache.so opcache.so pdo_mysql.so xcache.so php5.5之后如果编译时未安装 cd /home/tools/php-5.6.22/ext/pdo_mysql /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-mysql=/usr/local/mysql make make install ls /usr/local/php5.6.22/lib/php/extensions/no-debug-non-zts-20131226/ eaccelerator.so memcache.so opcache.so pdo_mysql.so xcache.so 说明: [root@test80 PDO_MYSQL-1.0.2]# /usr/local/php/bin/phpize 遇到如下过错,似乎可以忽略 config.m4:104: warning: AC_CACHE_VAL(pdo_inc_path, ...): suspicious cache-id, must contain _cv_ to be cached ../../lib/autoconf/general.m4:1974: AC_CACHE_VAL is expanded from... ../../lib/autoconf/general.m4:1994: AC_CACHE_CHECK is expanded from... aclocal.m4:2754: PHP_CHECK_PDO_INCLUDES is expanded from... config.m4:104: the top level config.m4:104: warning: AC_CACHE_VAL(pdo_inc_path, ...): suspicious cache-id, must contain _cv_ to be cached ../../lib/autoconf/general.m4:1974: AC_CACHE_VAL is expanded from... ../../lib/autoconf/general.m4:1994: AC_CACHE_CHECK is expanded from... aclocal.m4:2754: PHP_CHECK_PDO_INCLUDES is expanded from... config.m4:104: the top level
PHP扩展插件模块 ImageMagick及imagick
安装图像处理程序ImageMagick及imagick ImageMagick是一套功能强大、稳定而且开源的工具集和开发包,可以用来读、写和处理超过89种基本格式的图片文件, 包括流行的TIFF、JPEG、GIF、 PNG、PDF以及PhotoCD等格式。利用ImageMagick,你可以根据web应用程序的需要动态生成图片, 还可以对一个(或一组)图片进行改变大小、旋转、锐化、减色或增加特效等操作,并将操作的结果以相同格式或其它格式保存,对图片的操作, 即可以通过命令行进行,也可以用C/C++、Perl、Java、PHP、Python或Ruby编程来完成。同时ImageMagick提供了一个高质量的2D工具包, 部分支持SVG。ImageMagic的主要精力集中在性能,减少bug以及提供稳定的API和ABI上。 ImageMagick 是一个用来创建、编辑、合成图片的软件。它可以读取、转换、写入多种格式的图片。图片切割、颜色替换、各种效果的应用, 图片的旋转、组合,文本,直线, 多边形,椭圆,曲线,附加到图片伸展旋转。 ImageMagick是免费软件:全部源码开放,可以自由使用,复制,修改,发布。支持大多数的操作系统。 ImageMagick的功能 1. 将图片从一个格式转换到另一个格式,包括直接转换成图标。 2. 改变尺寸、旋转、锐化(sharpen)、减色、图片特效 3. 缩略图片的合成图( a montage of image thumbnails) 4. 适于web的背景透明的图片 5. 将一组图片作成gif动画,直接convert 6. 将几张图片作成一张组合图片,montage 7. 在一个图片上写字或画图形,带文字阴影和边框渲染。 8. 给图片加边框或框架 9. 取得一些图片的特性信息 10,几乎包括了gimp可以作到的常规插件功能。甚至包括各种曲线参数的渲染功能。只是那命令的写法,够复杂。 安装ImageMagick(ftp://ftp.imagemagick.org/pub/ImageMagick/) tar -xf ImageMagick-6.7.9-9.tar.xz cd ImageMagick-6.7.9-9 ./configure make make install 安装imagick php扩展插件 imagick插件工作需要ImageMagic软件支持,所以,必须先安装好ImageMagick imagick插件是一个可以供php调用ImageMagick功能的扩展模块,
使用这个扩展可以使PHP具备ImageMagick功能,使用imagick扩展才能使用ImageMagick的api来对图片进行操作 imagick扩展插件安装(http://pecl.php.net/package/imagick) tar -xf imagick-2.3.0.tgz cd imagick-2.3.0 /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config make make install ls /usr/local/php5.3.29/lib/php/extensions/no-debug-non-zts-20090626 eaccelerator.so imagick.so memcache.so opcache.so pdo_mysql.so xcache.so 安装imagick3.0扩展插件时报错 make: *** [imagick_class.lo] Error 1 #yum install ImageMagick-devel 安装后出现warning,最终make install能产生so文件 warning: 'MagickGetImageMatte' is deprecated (declared at /usr/include/ImageMagick/wand/deprecate.h:82) /root/tmp/pear/imagick/imagick_class.c: In function 'zim_imagick_paintfloodfillimage':
配置memcache/pdo_mysql/imagick模块生效 打开phpinfo页面进行验证=====================================================
1、修改php.ini #vi /usr/local/php/lib/php.ini extension_dir = "./" extension_dir = "/usr/local/php5.3.29/lib/php/extensions/no-debug-non-zts-20090626/" extension = memcache.so extension = pdo_mysql.so extension = imagick.so
报错 #pkill php-fpm # /usr/local/php/sbin/php-fpm [21-Oct-2016 14:27:28] NOTICE: PHP message: PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/php5.3.29/lib/php/extensions/no-debug-non-zts-20090626/pdo_mysql.so' - libmysqlclient.so.18: cannot open shared object file: No such file or directory in Unknown on line 0
# grep pdo_mysql /usr/local/php/lib/php.ini extension = pdo_mysql.so ;extension=php_pdo_mysql.dll ; http://php.net/pdo_mysql.cache_size pdo_mysql.cache_size = 2000 ; http://php.net/pdo_mysql.default-socket 解决方案 find / -name libmysqlclient.so vi /etc/ld.so.conf加入libmysqlclient.so的路径 ldconfig 通用解决方案参考 #找不到.so文件 #find / -name "libmysqlclient.so.18" /usr/lib #vi /etc/ld.so.conf /usr/lib #ldconfig
eaccelerator | eaccelerator-0.9.6.1.tar.bz2 | The latest release, 0.9.6.1, features support for PHP 5.3 and also works with PHP 5.1 and 5.2 | https://github.com/eaccelerator/eaccelerator/downloads |
eaccelerator-0.9.5.1.tar.bz2 | The previous 0.9.5 branch supports PHP 4 and all PHP 5 releases including 5.2. | ||
xcache | XCache 3.2.0. | Latest Stable Release: 3.2.x (full 5.1 ~ 5.6 support) | http://xcache.lighttpd.net或http://xcache.lighttpd.net/woki/Introduction |
ZendOpcache | PHP5.5版本后已经集成ZendOpcache,编译安装PHP时加入编译参数--enable-opcache | http://pecl.php.net/package/ZendOpcache | |
Memcache | Release 3.0.8:(Release 2.2.7:) |
PHP Version: PHP 4.3.11 or newer PEAR Package: 1.4.0b1 or newer |
http://pecl.php.net/get/memcache-2.2.7.tgz |
PDO_MYSQL | PDO_MYSQL-1.0.2.tgz | PDO_MYSQL的安装方法:一种是插件安装,另一种是编译PHP时直接指定PHP对应PDO_MYSQL的编译参数--with-pdo-mysql=mysqlnd |
http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz --with-pdo-mysql=mysqlnd,编译参数在生产中可能遇到socker连接问题 解决方法:在php.ini里添加pdo_mysql.default_scok=/usr/local/php/tmp/mysql.sock |
ImageMagick |
ImageMagick-6.7.9-9.tar.xz | ftp://ftp.imagemagick.org/pub/ImageMagick | http://pecl.php.net/package/imagick |
生产环境插件安装建议 功能性插件 PDO_MYSQL\memcache\imagick建议安装 性能性opcode插件任选一种,选择时可根据实际压测结果,上述插件效果都还可以 主流压测工具:apache ab、webbench、 http_load、loader runner |
配置 eAccelerator插件生效并优化参数
1、配置eAccelerator缓存目录 mkdir -p /tmp/eaccelerator #此目录可以用tmpfs文件系统或者SSD来存储 chown -R nginx.nginx /tmp/eaccelerator 2、修改php.ini文件,加载eaccelerator模块及参数配置 cat >> /usr/local/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.debug = 0 eaccelerator.check_mtime = "1" 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
3、访问PHP页面测试检查eaccelerator加速情况,重启php服务后,访问php页面,如phpini,就会有缓存
# ls /tmp/eaccelerator/
0 1 2 3 4 5 6 7 8 9 a b c d e f
# find /tmp/eaccelerator/ -type f | xargs file
/tmp/eaccelerator/3/8/eaccelerator-0502.413593: data
eaccelerator-0502.413593就是cache的内容,而且是phpinfo的页面缓存内容,类型为data
# /usr/local/php/bin/php -v
PHP 5.3.29 (cli) (built: Oct 15 2016 01:56:22)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2014 Zend Technologies
with eAccelerator v0.9.6.1, Copyright (c) 2004-2010 eAccelerator, by eAccelerator
tmpfs
tmpfs是一种基于内存的文件系统,它和虚拟磁盘ramdisk比较类似像,但不完全相同,和ramdisk一样,tmpfs可以使用RAM,但它也可以使用swap分区来存储。而且传统的ramdisk是个块设备,要用mkfs来格式化它,才能真正地使用它;而tmpfs是一个文件系统,并不是块设备,只是安装它,就可以使用了。tmpfs是最好的基于RAM的文件系统。(访问量大,总量不大的情况使用)
例如:上传图片,切图,服务器上 /tmp切图 临时文件。
使用tmpfs优化eaccelerator缓存目录
tmpfs是一种基于内存的文件系统,使用tmpfs作为数据临时存储通常比本地磁盘快很多,此方法适合各类缓存场景,例如,上传图片时候很多软件在/tmp下临时缓存切图、存放session数据,则可以让/tmp使用tmpfs文件系统来加快访问效率,本文将/tmp/accelerrator挂载到tmpfs文件系统上,让访问缓存数据更快,具体操作如下
[root@test80 ~]# mount -t tmpfs -o size=16m tmpfs /tmp/eaccelerator/
[root@test80 ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 14987656 3192996 11026660 23% /
tmpfs 502384 0 502384 0% /dev/shm
/dev/sda1 194241 35987 148014 20% /boot
tmpfs 16384 0 16384 0% /tmp/eaccelerator
提示:如需要原来缓存内容,可以先cp出来,然后cp进来
tmpfs挂载可以写到rc.local
参数详解
[eaccelerator] 开始eaccelerator加速模块配置
extension="eaccelerator.so" 加载的eaccelerator模块位置,相对路径extension_dir设置
eaccelerator.shm_size = "64" 存储缓存数据的共享内存大小,如果为0,则最大值看内核配置/etc/sys/kernel/shmmax
eaccelerator.cache_dir = "/tmp/eaccelerator" 磁盘缓存存储路径,缓存内容为precompiled code.session data,content and user entries here,缺省为/tmp/eaccelerator
eaccelerator.enable = "1" 缓存生效开关
eaccelerator.optimizer = "1" 加速PHP代码执行速度,1为默认值表示激活,用于缓存前的代码加速
eaccelerator.debug = 0 缓存加速调试,0为关闭,1为打开,打开后可以看到缓存命中信息
eaccelerator.check_mtime = "1" 检查缓存修改时间决定代码是否需要重新编译,1为激活,是默认值
eaccelerator.filter = "" 设定对象是否缓存规则,空表示不设定
eaccelerator.shm_max = "0" 可以被放置的最大缓存最大值,0不限制
eaccelerator.shm_ttl = "3600" 缓存文件的生存期
eaccelerator.shm_prune_period = "3600" 当共享内存空间不够时,从共享内存移除老数据的时间周期
eaccelerator.shm_only = "0" 是否允许缓存数据到磁盘,0为允许,但是对于session data和Content caching无影响
eaccelerator.compress = "1" 是否开启压缩,1为开启
eaccelerator.compress_level = "9" 压缩级别,9为最高
如下根据内容指定是否缓存到共享内存或磁盘参数
eaccelerator.keys = "shm_and_disk" 控制keys缓存位置
shm_and_disk==>cache data in shared memory and on disk (default value)
shm ==>cache data in shared memory or on disk if shared memory is full or data size greater then "eaccelerator.shm_max"
shm_only ==>cache data in shared memory
disk_only ==>cache data on disk
none ==>don't cache data
eaccelerator.sessions = "shm_and_disk" 控制session缓存位置
eaccelerator.content = "shm_and_disk 控制content缓存位置
eaccelerator.log_file = "/var/log/httpd/eaccelerator_log" Set the log file for eaccelerator. When this option isn't set then the data will be logged to stderr, when using PHP with Apache these lines will be added to the Apache error log.
eaccelerator.name_space = ""
参数详解https://github.com/eaccelerator/eaccelerator/wiki/Settings#Loading_eAccelerator
配置xcache缓存插件加速
配置前应将eAccerator所有配置清除 xcache.ini参数说明-->tar包解压目录有xcache.ini配置文件 [root@test80 xcache-3.2.0]# cat xcache.ini (http://xcache.lighttpd.net/wiki/XcacheIni参数) ;; this is an example, it won't work unless properly configured into php.ini [xcache-common] #加载xcache.so,路径相对于extension_dir的配置 extension = xcache.so #3.0版本开始不再支持zend_extension加载xcache的方式 [xcache.admin] #激活管理员认证 xcache.admin.enable_auth = On ; use http://xcache.lighttpd.net/demo/cacher/mkpassword.php to generate your encrypted password xcache.admin.user = "mOo" #指定xcache管理员用户名和密码,空表示禁止管理页面 xcache.admin.pass = "md5 encrypted password" #密码根据上述地址产生 [xcache] #开始配置参数,初始值即默认值 ; ini only settings, all the values here is default unless explained ; select low level shm implemenation xcache.shm_scheme = "mmap" #设置如何从系统分配共享内存 ; to disable: xcache.size=0 ; to enable : xcache.size=64M etc (any size > 0) and your system mmap allows xcache.size = 60M #0表示禁止缓存,需要注意系统所允许的nmap最大值 ; set to cpu count (cat /proc/cpuinfo |grep -c processor) xcache.count = 1 #指定将cache切成多少块,建议值为cpu的数量 ; just a hash hints, you can always store count(items) > slots xcache.slots = 8K #只是作为hash槽个数的参考值,缓冲超过这个数的内容没有问题 ; ttl of the cache item, 0=forever xcache.ttl = 0 #设置cache对象的生存周期TTL,0为永不过期 ; interval of gc scanning expired items, 0=no scan, other values is in seconds xcache.gc_interval = 0 回收器扫描过期的对象回收内存空间的间隔,0为不扫描,单位为秒 ; same as aboves but for variable cache,而不是opcode缓存 xcache.var_size = 4M xcache.var_count = 1 xcache.var_slots = 8K ; default value for $ttl parameter of xcache_*() functions xcache.var_ttl = 0 ; hard limit ttl that cannot be exceed by xcache_*() functions. 0=unlimited xcache.var_maxttl = 0 xcache.var_gc_interval = 300 ; mode:0, const string specified by xcache.var_namespace ; mode:1, $_SERVER[xcache.var_namespace] ; mode:2, uid or gid (specified by xcache.var_namespace) xcache.var_namespace_mode = 0 xcache.var_namespace = "" ; N/A for /dev/zero xcache.readonly_protection = Off 如果启用了此参数,会略微降低性能,但是会提高安全系数 这个选项对于xcache.mmap_path = "/dev/zero"无效 ; for *nix, xcache.mmap_path is a file path, not directory. (auto create/overwrite) ; Use something like "/tmp/xcache" instead of "/dev/*" if you want to turn on ReadonlyProtection ; different process group of php won't share the same /tmp/xcache ; for win32, xcache.mmap_path=anonymous map name, not file path xcache.mmap_path = "/dev/zero" #对于*nix, xcache.mmap_path是个文件路径而非目录,如果要启用该参数,请使用"/tmp/xcache" instead of "/dev/*"。如果开启了xcache.readonly_protection,不同进程组的PHP将不会共享同一个/tmp/xcache路径 ; Useful when XCache crash. leave it blank(disabled) or "/tmp/phpcore/" (writable by php) xcache.coredump_directory = "" #当xcache crash后,是否把数据保存到指定路径 ; Windows only. leave it as 0 (default) until you're told by XCache dev xcache.coredump_type = 0 ; disable cache after crash xcache.disable_on_crash = Off #当xcache crash后,自动关闭xcache缓存 ; enable experimental documented features for each release if available xcache.experimental = Off ; per request settings. can ini_set, .htaccess etc xcache.cacher = On xcache.stat = On xcache.optimizer = Off [xcache.coverager] ; enabling this feature will impact performance ; enabled only if xcache.coverager == On && xcache.coveragedump_directory == "non-empty-value" ; per request settings. can ini_set, .htaccess etc ; enable coverage data collecting and xcache_coverager_start/stop/get/clean() functions xcache.coverager = Off xcache.coverager_autostart = On ; set in php ini file only ; make sure it's readable (open_basedir is checked) by coverage viewer script xcache.coveragedump_directory = ""
调整关键参数,修改后将上述文件追加到php.ini
xcache.size=64M ##0表示禁止缓存,需要注意系统所允许的nmap最大值 xcache.size=256M
xcache.count = 1 #指定将cache切成多少块,建议值为cpu的数量
xcache.ttl = 0 #设置cache对象的生存周期TTL,0为永不过期 xcache.ttl = 86400
xcache.gc_interval = 0 回收器扫描过期的对象回收内存空间的间隔,0为不扫描,单位为秒 xcache.gc_interval = 3600
xcache.var_size = 4M xcache.var_size = 0
ZendOpcahce缓存加速配置
# vi /usr/local/php/lib/php.ini #加入配置参数 [opcache] zend_extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/opcache.so opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 opcache.revalidate_freq=60 opcache.fast_shutdown=1 opcache.enable_cli=1 [root@test80 zendopcache-7.0.5]# cat README (已删除部分,需要可查看) Compatibility ------------- This version of Zend OPcache is compatible with PHP 5.2.*, 5.3.*, 5.4.* and PHP-5.5 development branch. PHP 5.2 support may be removed in the future. Quick Install ------------- - Compile $PHP_DIR/bin/phpize ./configure \ --with-php-config=$PHP_DIR/bin/php-config make - Install make install # this will copy opcache.so into PHP extension directory - Edit php.ini zend_extension=/...full path.../opcache.so We recommend the following configuration options for best performance in a production environment.
关键参数解释 opcache.memory_consumption=128 #opcache共享内存空间大小,用于存放precompiled PHP code,默认64M opcache.interned_strings_buffer=8 #interned strings 内存的数量,默认4M opcache.max_accelerated_files=4000 #opcache哈希表key的最大数量,默认2000 opcache.revalidate_freq=60 #检查文件时间戳的频率,用于共享内存分配的变化,默认为2 opcache.fast_shutdown=1 #默认为0,如果激活,一个快速的关闭队列将被用来加速代码 opcache.enable_cli=1 默认为0,激活PHP CLI的opcache,用于测试和调试#
redis的php客户端扩展安装
redis的php客户端扩展安装 wget https://github.com/nicolasff/phpredis/archive/master.zip unzip phpredis-master.zip cd phpredis-master /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config make make install vi /usr/local/php/lib/php.ini echo "extension = redis.so" >> /usr/local/php/lib/php.ini ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/ memcache.so redis.so killall php-fpm /usr/local/php/sbin/php-fpm