为了账号安全,请及时绑定邮箱和手机立即绑定

php优化(一)

标签:
PHP

PHP缓存加速介绍

1、

操作码介绍及缓存原理

当客户端请求一个php程序时,服务器的PHP引擎会解析该PHP程序,并将其编译为特定的操作码文件(Operate Code,opcode)该文件是执行PHP代码后的一种二进制表示形式。默认情况下,这个编译好的操作码文件由PHP引擎执行后丢弃。而操作码缓存(Opcode cache)的原理就是讲编译后的操作码保存下来,冰岛共享内存里,以便在下一次调用该PHP页面时重用它,避免了相同代码的重复编译。节省了PHP引擎重复编译的时间,降低了服务器负载,同时减少了CPU和内存开销。加速性能可以达到2-10倍。

2、

PHP缓存加速软件介绍

为了提高PHP引擎的高并发访问及执行速度,产生了一系列PHP缓存及加速软件。这些软件设置的目的就是缓存PHP引擎解析过的操作码文件,以便在指定时间内有相同的PHP程序请求访问时,不再需要重复解析编译,而是直接调用缓存中的PHP操作码文件,这样就提高了动态Web服务的处理速度,从而提升了用户访问企业网站的整体体验。

3、

Apache环境的PHP缓存加速器原理

在LAMP环境中,Apache服务是使用libphp5.so响应处理PHP程序请求的,整个流程如下:

1、Apache接收客户端的PHP程序请求并根据规则过滤。

2、Apache将PHP程序请求传递给PHP处理模块libphp5.so

3、PHP引擎定位磁盘上的PHP文件,并将其加载到内存中解析

4、PHP处理模块libphp5.so将PHP源代码编译成为opcode

5、PHP处理模块libphp5.so执行opcode,然后把opcode缓存起来

6、Apache接收客户端新的PHP程序请求,PHP引擎直接读取缓存执行opcode文件,并将结果返回。在这一次任务中,就无第4步的编译解析了,从而提升了PHP编译解析效率。

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缓存加速器软件种类及选择建议

PHP缓存加速器软件常见的种类有xcache、eaccelerator、APC(Altemative PHP Cache)、ZendOpache等。

建议根据企业的业务需求及选择前的压力测试结果,或者根据个人的经验偏好选择。不过建议首选xcache,其次是eaccelarator,如果想使用新款,可以选择ZendOpcache。

注:APC全称为Altemative PHP Cache,也是一款不错的PHP缓存加速软件。可以查看相关资料文档:
http://pecl.php.net/packages.php和http://pecl.php.net/package/APC

首选xcache的原因如下:

1.经过测试xcache效率更好,更快

2.xcache软件开发社区更活跃。

3.支持更好版本的PHP,例如PHP5.5、PHP5.6

次选eaccelerator的原因如下:

1、安装及配置参数更简单,加速效果也不错

2、文档资料较多,但官方对软件的更新很慢,社区不活跃

3、仅适合PHP版本5.4以下的程序

选择ZendOpcache的原因如下:

1.是PHP官方研发的新一代缓存加速软件,以后的发展潜力可能会很好,PHP5.5以前的版本可以通过ZendOpcode软件以插件扩展的方式安装,从PHP5.5版本开始已经整合到PHP软件里了,编译时只需指定一个参数即可,例如:–enable-opcache

2、ZendOpcache可能是未来的缓存加速首选,现在的稳定性还有待检验,小规模环境下PHP5以前的版本可以通过插件式安装使用,PHP5以上的版本可以直接指定参数编译使用,若可以热手ZendOpcache的各种未知问题的话,可以尝试使用。

安装PHP加速插件

1.环境准备

[root@web02 ~]# cat /etc/redhat-release CentOS release 6.7 (Final)[root@web02 ~]# uname -r2.6.32-573.el6.x86_64[root@web02 ~]# uname -mx86_64

2.软件版本信息

Nginx版本信息[root@web02 application]# /application/nginx/sbin/nginx -Vnginx version: nginx/1.6.3built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC) TLS SNI support enabledconfigure arguments: --prefix=/application/nginx-1.6.3/ --user=www --group=www --with-http_ssl_module --with-http_stub_status_modulePHP版本信息[root@web02 application]# /application/php/bin/php -vPHP 5.5.32 (cli) (built: May 24 2016 13:55:46) Copyright (c) 1997-2015 The PHP GroupZend Engine v2.5.0, Copyright (c) 1998-2015 Zend TechnologiesMySQL版本信息[root@db01 ~]# mysql -Vmysql  Ver 14.14 Distrib 5.5.49, for linux2.6 (x86_64) using readline 5.1

配置环境变量LC_ALL的过程如下:


[root@web02 ~]# echo 'export LC_ALL=C' >>/etc/profile#设置环境变量,解决后面perl程序插件的编译问题[root@web02 ~]# tail -1 /etc/profileexport LC_ALL=C[root@web02 ~]# source /etc/profile[root@web02 ~]# echo $LC_ALLC

有关LNMP环境扩展软件的部署说明

1、LNMP缓存加速特别提示

不管是Apache还是Nginx,最后都是通过PHP提供动态程序解析的,因此,不管是Apache的libphp5.so模块方式,还是Nginx的FCGI的PHP服务方式,最后在PHP引擎上的优化是一致的,即都是基于PHP服务(php.ini)的。

2、安装Perl相关软件依赖

  需要提前安装Perl相关软件依赖包,执行

yum -y install perl-CPAN或yum -y install perl-devel

  如果不安装上述软件包,在后面安装ImageMagick时可能会报错。

安装PHP缓存加速器扩展

1、安装PHP eAccekerator 缓存加速模块

插件说明:
eAccelerator是一个免费的,开放源代码的PHP加速、优化以及缓存的扩展插件软件,它可以缓存PHP程序编译后的中间代码文件(opcache)、sission数据等。降低PHP程序在编译解析时对服务器的性能开销。eAccelerator还可以加快PHP程序的执行速度,降低服务器负载压力,使PHP程序代码效率提高1~10倍。

eAccelerator会把编译好的PHP程序存放在共享内存里,然后每次从内存里调用执行,可以设定把一些不适合放在内存里缓存的编译结果存储到硬盘上,默认情况,磁盘和内存都会被eAccelerator使用。

eAccelerator算是一个老牌的缓存加速软件,曾经在结合PHP引擎解析式被广泛使用,成熟稳定,目前代码更新不活跃,因此使用企业逐渐减少,但eAccelerator仍是一款值得信赖的缓存加速软件。Xcache的官方也称赞eAccelerator是不错的opcache缓存器。

安装过程如下:

wget   tar xf eaccelerator-0.9.6.1.tar.bz2cd eaccelerator-0.9.6.1/application/php/bin/phpize./configure --enable-eaccelerator=shared --with-php-config=/application/php/bin/php-config#<==configure的参数路径要正确配置,特别是后面的--with-php-config参数对应的PHP安装目录地址,几乎所有的PHP扩展都要指定这个参数,请读者注意,后面过程中不再提及。makemake installcd ../ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/提示:php5.5不支持

eAccelerator软件包下载   密码:rz1q

2、Phpize介绍

安装PHP扩展插件的时候,常常需要执行/application/php/bin/phpize。

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

PHP官方的说明:http://php.net/manual/en/install.pecl.phpize.php

3、安装PHP xcache缓存加速模块

插件说明:

XCache是一个开源的、又快又稳定的PHP opcode缓存器/优化器。其项目leader曾经是Lighttpd的开发成员之一。XCache通过把对PHP程序编译后的数据(opcode)缓存到共享内存里,避免让相同的程序重复编译。用户请求相同的PHP程序时,可以直接使用缓存中已编译好的数据,从而提高PHP的访问速度,通常可以提升2~5倍,并大幅降低服务器负载开销。

很多公司在使用XCache,它已经能在大流量/高负载的生产环境温度运行,与同类型的opcode缓存器相比在各个方面都更胜一筹。例如:社区活跃、快速开发、能够快速跟进PHP的版本更新等。

当前稳定版本为3.1x (全面支持PHP5.1~5.5)和3.2 (PHP5.1~5.5)

有关XCache软件详情参考:http://xcache.lighttpd.net/ 

或http://xcache.lighttpd.net/wiki/Introduction

安装步骤:

tar xf xcache-3.2.0.tar.bz2cd xcache-3.2.0/application/php/bin/phpize./configure --enable-xcache   --with-php-config=/application/php/bin/php-configmakemake installls -l /application/php5.5.32/lib/php/extensions/no-debug-non-zts-20121212/xcache.so cd ..[root@web02 xcache-3.2.0]# ls -l /application/php5.5.32/lib/php/extensions/no-debug-non-zts-20121212/xcache.so -rwxr-xr-x 1 root root 692884 May 30 12:20 /application/php5.5.32/lib/php/extensions/no-debug-non-zts-20121212/xcache.so

温馨提示:每个PHP插件安装完成都会在它提示的一个目录下生成*.so的一个模块

XCache下载 密码:dvj5

4、安装PHP官方加速插件ZendOpcache

常见的PHP缓存加速器:APC、eAccelerator、XCache,从PHP5.5开始,官方已经集成了新一代的缓存加速插件,名字为ZendOpcache,功能和前三者相似但又有少许不同,据官方说,这个ZendOpcache缓存速度更快。

PHP加速插件的主要原理基本相同,就是把PHP执行后的数缓存到内存中从而避免重复的编译过程,使其能够直接使用缓存中已编译的代码,从而提高速度,降低服务器负载,他们的效率是显而易见的。每次打开一个页面要调用数十个PHP文件,执行数万行代码,效率可想而知。

安装步骤:

PHP5.5以上版本,支持Zend Opcache很简单,只需在编译PHP5.5的时候加上–enable-opcache就行了。其实在PHP5.5版本以前,Zend Opcache也有独立的软件,并且也支持低版本的PHP5.2.*、PHP5.3*、PHP5.4*。

具体的安装命令集如下: 不使用 可以在编辑php的时候将no改成yes即可

cd /home/oldboy/tools/wget -q http://pecl.php.net/get/zendopcache-7.0.5.tgztar xf zendopcache-7.0.5.tgzcd zendopcache-7.0.5/application/php/bin/phpize./configure --enable-opcache --with-php-config=/application/php/bin/php-configmakemake installls -l /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/cd ..

ZendOpcache下载    密码:xkku

以上安装都是php缓存 加速 优化相关插件 3选一即可

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

1、安装PHP Memcached 扩展插件

插件说明:

Memcached是一个开源的、支持高性能、高并发以及分布式的内存缓存服务软件,从名称上看,前3个字符的单词Mem就是内存的意思,而后面5个字符的单词Cache就是缓存的意思,最后字符d,是daemon的意思,代表是服务端进程模式服务。

Memcached服务分为服务端和客户端两部分,其中,服务端软件名称如:

Memcached-*.*.tar.gz,客户端软件:memcache-*.*.tar.gz

Memcached诞生于2003年,最初由LiveJoumal的Brad Fitzpatrick开发完成。Memcached是整个项目的名称,而Memcached是服务端的主程序名,因其协议简单,且支持高并发而被广泛使用。

场景介绍:

在传统场景下,多数Web应用都将数据保存在RDBMS中,www服务器从中读取数据并在浏览器中显示。但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应缓慢、网站打开延迟等恶劣影响  

提示:这里我们安装只是安装的客户端相当于一个插件,还需要配置服务端才可以生效


安装步骤:

PHP的Memcached扩展插件下载地址为:http://pecl.php.net/package/memcache

PHP的Memcached客户端扩展操作步骤:

安装过程

cd /home/oldboy/tools/wget -q http://pecl.php.net/get/memcache-2.2.7.tgztar zxf memcache-2.2.7.tgzcd memcache-2.2.7/application/php/bin/phpize./configure  --enable-memcache  --with-php-config=/application/php/bin/php-configmakemake installcd ../ [root@web02 memcache-2.2.7]# ls /application/php5.5.32/lib/php/extensions/no-debug-non-zts-20121212/memcache.so  opcache.so  xcache.so

此处就有我们安装的memcached.so

memcached下载 密码:ciww

安装redis

wget  mv 2.2.4.tar.gz phpredis-2.2.4.tar.gz tar xf phpredis-2.2.4.tar.gzcd phpredis-2.2.4/application/php/bin/phpize  ./configure --enable-redis --with-php-config=/application/php/bin/php-configmakemake installll /application/php5.5.32/lib/php/extensions/no-debug-non-zts-20121212/

提示:安装的memcached和redis都只是客户端,还需要配置服务端

安装PDO_MYSQL扩展模块

1、PDO_MYSQL扩展插件说明

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

PDO_MYSQL下载   密码:0flx

2、PDO_MYSQL安装过程

PDO_MYSQL的安装有两种方法:一种插件方式安装,一种是编译PHP时加入PDO_MYSQL支持,直接指定PHP的对应PDO_MYSQL编译参数即可。例如:–with-pdo-mysql=mysqlnd,同时PHP的环境也可以不安装MySQL软件,直接指定如下参数–with-mysql=mysqlnd即可让PHP支持连接MySQL数据库。

3、PHP5.3安装步骤

cd /home/oldboy/toolswget -q http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgztar xf 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[root@web02 tools]# cd php-5.5.32/ext/pdo_mysql/[root@web02 pdo_mysql]# lsCREDITS              mysql_statement.oconfig.m4            package2.xmlconfig.w32           pdo_mysql.cget_error_codes.php  pdo_mysql.lomysql_driver.c       pdo_mysql.omysql_driver.lo      php_pdo_mysql.hmysql_driver.o       php_pdo_mysql_int.hmysql_statement.c    php_pdo_mysql_sqlstate.hmysql_statement.lo   tests

 php5.5 pdo_mysql扩展插件安装方法

cd /home/oldboy/tools/php-5.5.32/ext/pdo_mysql//application/php/bin/phpize./configure  --with-php-config=/application/php/bin/php-config --with-pdo-mysql=/application/mysqlmakemake installll /application/php5.5.32/lib/php/extensions/no-debug-non-zts-20121212/企业环境直接编译php直接加--whith-pdo-mysql=


安装其他的PHP扩展插件模块

安装图像处理程序及imagick 扩展模块
1.安装ImageMagick图像软件

ImageMagick是一套功能强大、文档而且免费的工具集和开发包,可以用来读、写和处理超过89种基本格式的图片文件,包括流行的TIFF,JPEG,GIF、PNG、PDF以及PhotoCD等。利用ImageMagick,你可以根据Web应用程序的需要动态生成图片,还可以对一个(或一组)图片进行改变大小、旋转、锐化、减色或增加特效等操作。

ImageMagick的常见功能:

1、将图片从一个格式转换到另一个格式,包括直接转换图标。

2、可以改变图片尺寸。旋转、锐化(sharpen)、减色、设置图片特效。

3、对图片设置各种尺寸缩略图

4、将图片设置为可以适应于Web背景的透明图片

5、将一组图片作成gif动画,直接convert

6、将几张图片做成一张组合图片

7、在一个图片上写字或画图形,带文字阴影和边框渲染

8、给图片加边框或框架

9、取得一些图片的特性信息

它几乎包括了gimp可以实现的所有常规插件功能,甚至包括各种曲线参数的渲染功能。

ImageMagick下载    密码:nx7r

提示:ImageMagick只是插件需要的图像处理软件,安装ImageMagick不会生产.so,因为不是插件只是一个软件

ls -l ImageMagick-6.7.9-9.tar.xztar xf ImageMagick-6.7.9-9.tar.xzcd ImageMagick-6.7.9-9./configuremake && make installcd ../

2.安装imagick php扩展插件

  imagick插件工作需要ImageMagick软件的支持,所以,必须要先安装ImageMagick,否则会出现报错等一系列问题。

  imagick插件是一个可以供PHP调用ImageMagick功能的扩展模块。使用这个扩展可以使PHP具备和ImageMagick相同的功能。装了ImageMagick图像程序后,再装PHP的扩展imagick插件,才能使用ImageMagick提供的api来进行图片的创建与修改、压缩等操作。因为他们都集成在了imagick这个PHP扩展中。

  imagick-2.3.0.tgz版本太低了,不支持php5.5,需要ImageMagick-6.7.9-9.tar.xz的支持,因此,注意先后顺序。

imagick下载  密码:ise8

tar zxf imagick-3.1.0.tgzcd imagick-3.1.0/application/php/bin/phpize./configure --with-php-config=/application/php/bin/php-configmakemake installll /application/php5.5.32/lib/php/extensions/no-debug-non-zts-20121212/#会在此处显示一个imagick.so


配置Memcached/pdo_mysql/imagick模块生效

1.修改PHP的配置文件php.ini

  可以在php.ini修改参数。也可以在后面直接添加。我们直接添加即可

 vim /application/php/lib/php.ini  716 ; extension_dir = "./"  717 ; On windows:  718 ; extension_dir = "ext" 可以在最后一行 extension_dir = "/application/php5.5.32/lib/php/extensions/no-debug-non-zts-20121212/" #此处参数就是刚刚我们查看模块的地址 extension = memcache.so extension = pdo_mysql.so extension = imagick.so 查看生效情况:也可以使用phpinfo.php [root@web02 ~]#  /application/php/bin/php -m|egrep "memcache|pdo_mysql|imagick"     imagick memcache pdo_mysql

提示:pdo_mysql在php5.5已经安装,如果此处报错。建议在配置文件删除pdo_mysql这个模块phpinfo会出现几个模块

错误提示:动态连接库有问题 

解决方法:

1.制作软连接

ln -s /application/mysql-5.5.32/lib/libmysqlclien.so.18 /usr/lib64/libmysqlclient.so.18

2.或者将/usr/lib64放到/etc/ld.so.conf

[root@web02 ~]# cat /etc/ld.so.confinclude ld.so.conf.d/*.conf/usr/lib64[root@web02 ~]# ldconfig   刷新


配置eAccelerator插件生效并优化参数

1.配置eAccelerator缓存目录

[root@web02 ~]# mkdir -p /tmp/eaccelerator#此目录可以用tmfs内存文件系统或者SSD固态硬盘来存储[root@web02 ~]# chown -R www.www /tmp/eaccelerator#此处用户是nginx的用户

2.配置eAccelerator参数

 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

eaccelerator配置参数详解

eAccelerator参数解释说明
[eaccelerator]开始eAccelerator加速模块配置
extension=eaccelerator.so加载eAccelerator加速模块,路径相当于extension_dir的配置
eaccelerator.shm_size=”64″存储缓存数据的共享内存大小,如果为0,则最大值看内核配置/proc/sys/kermel/shmmax。
eaccelerator.cache_dir=”/tmp/eaccelerator”磁盘缓存存储路径,缓存内容为precompiled sode、session data、content和user entnes。默认路径为“/tmp/eacclerator”
eaccelerator.enable=”1″eAccelerator缓存生效开关,1为默认,即生效。0为关闭,即不生效
eaccelerator.optimizer=”1″加速PHP代码执行速度,1为默认值表示激活,0为不激活。用于缓存前的代码加速。
eaccelerator.check_mtime=”1″检查缓存修改时间决定代码是否需要重新编译。1为激活,是默认值
eaccelerator.debug=”0″缓存加速调试。0为关闭,1为打开,打开后可以看到缓存命中信息。
eaccelerator.filter=””设置对象是否缓存规则,控表示不设定。
eaccelerator.shm_max=”0″可以被放置的缓存最大值,0是不限制
eaccelerator.shm_ttl=”3600″缓存文件的生存周期(单位秒)
eaccelerator.shm_prune_period=”3600″当共享空间不够时,从共享内存移除老数据的时间周期。
eaccelerator.shm_only=”0″是否允许缓存数据到磁盘,0为允许,但是对于session data and content caching无影响
eaccelerator.compress=”1″是否开启压缩,1为开启
eaccelerator.compress_level=”9″压缩级别,9为最高


php5.5 无法安装eAcelerator 所以我们无法查看。如果安装成功可以使用命令查看

[root@web02 ~]# /application/php/bin/php -v

出现eAccelerator版本信息为安装成功

3.使用tmpfs优化eAccelerator

  tmpfs是一种基于内存的文件系统,使用tmpfs作为数据临时存储通常比本地硬盘快很多,此方法适用于临时使用的各类缓存场景。例如:上传图片时很多软件默认在/tmp下临时缓存切图、存放session数据,则可以让/tmp使用tmpfs文件系统来加快访问效率。

操作如下:

[root@web02 ~]# mkdir /tmp/ [root@web02 ~]# mount -t tmpfs -o size=16m tmpfs /tmp/www.abcdocker.com#创建16M大小的tmpfs类型文件系统挂载到/tmp/www.abcdocker.comtmpfs是一种基于内存的文件系统。[root@web02 ~]# df -h  #检查挂载情况Filesystem      Size  Used Avail Use% Mounted on/dev/sda3       6.6G  4.2G  2.1G  67% //dev/sda1       190M   36M  145M  20% /boottmpfs            16M     0   16M   0% /tmp/www.abcdocker.com

提示:使用tmpfs可以将访问磁盘改为访问内存

永久挂载设置[root@web02 ~]# tail -1 /etc/fstab    tmpfs           /tmp/www.abcdocker.com  tmpfs   size=16m        0 0[root@web02 ~]# umount /tmp/www.abcdocker.com/[root@web02 ~]# grep www /proc/mounts [root@web02 ~]# mount -a   #刷新fstab[root@web02 ~]# grep www /proc/mounts tmpfs /tmp/www.abcdocker.com tmpfs rw,relatime,size=16384k 0 0

案例:用户上传图片到nginx,nginx 会在/tmp/下面切割图片,导致磁盘IO偏高。

解决方案: 可以使用tmpfs 将内存作为临时硬盘进行设置。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消