php优化,操作码优化,缓存优化
一、php缓存加速器软件种类
xcache,eaccelerator,zend,apc
如何选择:
建议xcache,eaccelerator,二选一,首选xcache
xcache更快
二、php缓存加速器
请求一个PHP程序时,PHP引擎会解析该程序,并将其编译为特定操作码,这是要执行的代码的一种二进制表示形式。
随后,此操作码有PHP引擎执行并丢弃。操作码缓存将保存这个编译后的操作码,
并在下一次调用该页面时重用它。这会节省很多重复编译的时间。
为了提高PHP引擎的执行效率,PHP缓存加速器设计的目的是缓存PHP解析过的操作码,
这样同样的请求访问过来,PHP引擎就不需要解析转换了,可以直接调用PHP的操作码,
这样就提高了web服务响应速度,从而提升了用户的访问体验。
三、原理分析
1、apache接收客户PHP程序请求。
2、apache将php程序请求传递给libphp5.so。
3、libphp5.so定位磁盘上的Php文件,并加载到内存中。
4、libphp5.so编译源代码成为opcode树。
5、libphp5.so执行opcode树。
PHP缓存加速器解决的就是上述第4步问题,将opcode内容进行缓存,目的是防止
PHP每次请求都重复编译解析PHP程序代码,因为在高访问量的网站上,大量的重复编译
会消耗很多资源和事件,所以这里面的瓶颈就是PHP的重复编译既影响了响应速度,
又加重了服务器的负载,为了解决此问题,PHP加速器就这样诞生了。...
四、版本问题
php5.3.x可以用eaccelerator-0.9.6版本,如果使用0.9.5.2版本在make阶段会报错
php5.2.x可以用eaccelerator-0.9.5.2版本。。。。版本很重要,,,安装该软件可能需要考虑perl的编译问题。
五、安装Php加速软件
Eaccelerator:
5.1.1)配置环境变量LC_ALL
[root@aliyun ~]# echo 'export LC_ALL=C'>>/etc/profile
[root@aliyun ~]# . /etc/profile
5.1.2)安装perl相关软件
[root@aliyun ~]# yum -y install perl-devel
5.1.3)安装php eaccelerator缓存加速模块 http://blog.csdn.net/zqtsx/article/details/9770715
下载源码:http://eaccelerator.net/
5.1.4)在php程序中执行如下,在php程序中安装插件几乎都要执行如下的操作
[root@aliyun eaccelerator-0.9.6]# /application/php/bin/phpize
phpize是用来扩展php模块的,通过phpize可以建立php的外挂模块
5.1.5)开始编译、安装
[root@aliyun eaccelerator-0.9.6]# ./configure --enable-eaccelerator=shared --with-php-config=/application/php/bin/php-config
make && make install /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/ 这下面的模块就是安装成功了
-rwxr-xr-x 1 root root 414117 Sep 8 10:12 eaccelerator.so
Xcache:
第二个加速模块,这个与上面的二选一就够了,不用都安装xcache是一个又快又稳定的php opcode缓存器。经过良好的测试并在大流量/高负载的生产机器上稳定运行,经过测试并支持所有现行php分支的的最新发布版本,并支持线程安全/windows,与同类opcode缓存器相比更胜一筹。
xcache的两个特点:
将php代码进行编译(表现类似于.net和java的编译,内部机制不同),这样可以不用重复读取php文件,加速整个程序的运行效率;
可以缓存数据到内存,直接可以用,例如你的一些不会经常改动的数据,只用一次从数据库读取出来后保存到xcache中,就不用再去读取数据库了。
5.2.1)
/application/php/bin/phpize
5.2.2)编译安装
./configure --enable-xcache --with-php-config=/application/php/bin/php-config
make && make install 安装好之后查看路径模块
[root@aliyun xcache-1.3.2]# ll /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/
total 876
-rwxr-xr-x 1 root root 414117 Sep 8 10:12 eaccelerator.so
-rwxr-xr-x 1 root root 475399 Sep 8 11:03 xcache.so
注意,nginx,apache的模块路径可能不一样
Memcache:
memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存读取,从而大大提高读取速度。
memcache分为服务端软件(memcached-1.4.3.tar.gz)和客户端插件(名字如:memcache-2.2.5.tgz)两个部分,本文就是客户端插件在Php服务中的安装。
5.3.1)编译安装
[root@aliyun tools]# tar -xf memcache-2.2.5.tgz
[root@aliyun tools]# cd memcache-2.2.5
[root@aliyun memcache-2.2.5]# /application/php/bin/phpize
Configuring for:
PHP Api Version: 20090626
Zend Module Api No: 20090626
Zend Extension Api No: 220090626
[root@aliyun memcache-2.2.5]# ./configure --with-php-config=/application/php/bin/php-config
make && make install [root@aliyun memcache-2.2.5]# ll /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/
total 1120
-rwxr-xr-x 1 root root 414117 Sep 8 10:12 eaccelerator.so
-rwxr-xr-x 1 root root 246576 Sep 8 12:59 memcache.so
-rwxr-xr-x 1 root root 475399 Sep 8 11:03 xcache.so
PDO_MYSQL(可选):
PDD扩展为php访问数据库定义了一个轻量级的、一致性的接口,它提供了一个数据访问抽象层,这样,无论使用什么数据库,都可以通过一致的函数执行查询并获取数据。
5.4.1)安装
[root@aliyun tools]# tar zxf PDO_MYSQL-1.0.2.tgz
[root@aliyun tools]# cd PDO_MYSQL-1.0.2
[root@aliyun PDO_MYSQL-1.0.2]# /application/php/bin/phpize
[root@aliyun PDO_MYSQL-1.0.2]# ./configure --with-php-config=/application/php/bin/php-config --with-pdo-mysql=/application/mysql
make && make install
ImageMagick:
ImageMagick是一个免费的创建、编辑、合成图片的软件。它可以读取、转换、写入多种格式的图片。图片切割、颜色替换、各种效果的应用,图片的旋转、组合,文本,直线,多边形,椭圆,曲线,附加到图片伸展旋转。ImageMagick是免费软件:全部源码开放,可以自由使用,复制,修改,发布,它遵守GPL许可协议,可以运行于大多数的操作系统,ImageMagick的大多数功能的使用都来源于命令行工具。
5.5.1)安装图像处理程序及imagick扩展模块,,,,安装的时候注意版本,我在centos7上安装的时候,,ImageMagick-7.0.7-0 imagick-3.4.3
[root@server tmp]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
3.10.0-327.el7.x86_64
5.5.2)编译安装
tar -zxf ImageMagick.tar.gz
cd ImageMagick-6.5.1-2/
./configure
make && make install
make报错:会有perl的错,内存不够的错,等等,内存要尽量大点,要不然编译一直包内存不够的错,,,可以先make ,然后make install
imagick php
imagick插件需要ImageMagick软件的支持,所以必须要先安装ImageMagick。一个可以供php调用ImageMagick功能的扩展。使用这个扩展可以使PHP具备和ImageMagick相同的功能。
5.6.1)编译安装
[root@aliyun tools]# tar -zxf imagick-2.3.0.tgz
[root@aliyun tools]# cd imagick-2.3.0
[root@aliyun imagick-2.3.0]# /application/php/bin/phpize
Configuring for:
PHP Api Version: 20090626
Zend Module Api No: 20090626
Zend Extension Api No: 220090626
[root@aliyun imagick-2.3.0]# ./configure --with-php-config=/application/php/bin/php-config
make && make install
六、配置php加速与环城扩展模块
修改/application/php/lib/php.ini 这个是我自己改的php.ini配置文件的位置,每个人的可能都不一样,默认在/etc下,有相关参数可以配置
6.1)配置memcache.so、pdo_mysql.so、imagick.so三个模块
a.执行vi /application/php/lib/php.ini编辑查找extension_dir="./"参数
修改为extension_dir = "/application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/"
模块的路径
windows的不管 b.按住shift+g到文件结尾,增加以下几行,然后保存:,让模块生效
extension = memcache.so
extension = pdo_mysql.so
extension = imagick.so
此时需要重启php-fpm
[root@aliyun lib]# pkill php-fpm
[root@aliyun lib]# /application/php/sbin/php-fpm
可以通过phpinfo();验证以下,是否生效,如果生效就会产生相应的模块。。。
6.2)配置eaccelerator插件生效
a.配置eaccelerator缓存目录
[root@aliyun ~]# mkdir -p /tmp/eaccelerator
[root@aliyun ~]# chown -R nginx.nginx /tmp/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
如果配置了zend,上面这个要放在zend前面
eacc查看加速情况,要生效最好重启服务器和php-fpm
[root@aliyun ~]# /application/php/bin/php -v
PHP 5.3.27 (cli) (built: Sep 4 2017 21:33:58)
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 [root@aliyun ~]# ll /tmp/eaccelerator/
total 64
drwxrwxrwx 18 root root 4096 Sep 11 10:07 0
drwxrwxrwx 18 root root 4096 Sep 11 10:07 1
drwxrwxrwx 18 root root 4096 Sep 11 10:07 2
drwxrwxrwx 18 root root 4096 Sep 11 10:07 3
drwxrwxrwx 18 root root 4096 Sep 11 10:07 4
drwxrwxrwx 18 root root 4096 Sep 11 10:07 5
drwxrwxrwx 18 root root 4096 Sep 11 10:07 6
drwxrwxrwx 18 root root 4096 Sep 11 10:07 7
drwxrwxrwx 18 root root 4096 Sep 11 10:07 8
drwxrwxrwx 18 root root 4096 Sep 11 10:07 9
drwxrwxrwx 18 root root 4096 Sep 11 10:07 a
drwxrwxrwx 18 root root 4096 Sep 11 10:07 b
drwxrwxrwx 18 root root 4096 Sep 11 10:07 c
drwxrwxrwx 18 root root 4096 Sep 11 10:07 d
drwxrwxrwx 18 root root 4096 Sep 11 10:07 e
drwxrwxrwx 18 root root 4096 Sep 11 10:07 f [root@aliyun ~]# find /tmp/eaccelerator/ -type f
/tmp/eaccelerator/2/4/eaccelerator-31546.068039
/tmp/eaccelerator/2/4/eaccelerator-31546.358039
/tmp/eaccelerator/2/f/eaccelerator-31546.284529
/tmp/eaccelerator/2/f/eaccelerator-31546.584529
……
6.3)配置xcache插件加速,,,这个与eaccelerator只要配置一个就好了,配置两个可能会有冲突
[root@aliyun xcache-1.3.2]# ls xcache.ini
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
27 xcache.count = 1
31 xcache.ttl = 86400
33 xcache.gc_interval = 3600
36 xcache.var_size = 0 将修改后的xcache.ini合并到php.ini结尾
[root@aliyun xcache-1.3.2]# cat xcache.ini >> /application/php/lib/php.ini
生产环境插件的安装建议
1)功能性插件,如果开发人员没需求,可以暂时不考虑安装,如:PDO_MYSQL,memecache,imagick
2)优化性插件eaccelerator,xcache,ZendOptimizer,apc可以任意4选1安装。,前两个好点。
php优化,操作码优化,缓存优化的更多相关文章
- MySQL优化-一 、缓存优化
body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-top: 10 ...
- MySQL优化二(连接优化和缓存优化)
body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-top: 10 ...
- PHP服务缓存优化之ZendOpcache、xcache、eAccelerator
PHP服务缓存优化原理 Nginx 根据扩展名或者过滤规则将PHP程序请求传递给解析PHP的FCGI,也就是php-fpm进程 缓存操作码(opcode) Opcode,PHP编译后的中间文件,缓存给 ...
- 四十、LAMP与LNMP加速与缓存优化进阶实战上部
实例: 一. 所有服务器配置定时时间同步,必须通过web server上网. 有两种方式: 1.服务器A能进行上网,作为web server ,通过指定为ntp服务器,所有服务器访问这个服务器 2.服 ...
- [MySQL性能优化系列]提高缓存命中率
1. 背景 通常情况下,能用一条sql语句完成的查询,我们尽量不用多次查询完成.因为,查询次数越多,通信开销越大.但是,分多次查询,有可能提高缓存命中率.到底使用一个复合查询还是多个独立查询,需要根据 ...
- django缓存优化中caches参数如何配置?
在python开发中,如果运营django进行编写,为了提升效率,常常需要优化缓存,缓存优化中必须掌握的caches参数相关知识: CACHES 配置参数概述 - 格式 CACHES 字典配置格式如下 ...
- NSCache和NSURLCache、网络缓存优化
本文目录 一种缓存优化方案 响应头'Last-Modified'和请求头'If-Modified-Since' 'Keep-Alive'响应头和不离线的URLSession 'Expires'响应头 ...
- 转 cocos2d-x 优化(纹理渲染优化、资源缓存、内存优化)
概述 包括以下5种优化:引擎底层优化.纹理优化.渲染优化.资源缓存.内存优化 引擎优化 2.0版本比1.0版本在算法上有所优化,效率更高.2.0版本使用OpenGl ES 2.0图形库,1.0版本 ...
- iOS网络加载图片缓存策略之ASIDownloadCache缓存优化
iOS网络加载图片缓存策略之ASIDownloadCache缓存优化 在我们实际工程中,很多情况需要从网络上加载图片,然后将图片在imageview中显示出来,但每次都要从网络上请求,会严重影响用 ...
- Tomcat并发优化和缓存优化
Tomcat并发优化 1.调整连接器connector的并发处理能力 在Tomcat 配置文件 server.xml 中的 <Connector ... /> 配置中 1.参数说明 max ...
随机推荐
- RTT第一个工程
第一个RTT工程 1. 配置工程 选择芯片STM32F103C8(其包含该芯片的Flash及SRAM介绍): Jlink SW模式 output->Debug info/Browse info ...
- Linux高频指令总结
作为一个计算机专业的科班,不会玩Linux怎么能行呢?玩Linux用可视化界面显得太low了,为了效(zhuang)率(bi),当然要用什么都用指令啊,可是指令太多了啊,现在就把平时遇到的高频的指令做 ...
- Matlab之合并音频
程序功能: 1.读入wav下的所有音频 2.每个音频截取前0.6秒 3.合并每个音频 clear all; cd = 'wav'; waveFiles = dir(fullfile(cd,'*.wav ...
- 描述J2EE框架的多层结构,并简要说明各层的作用。
描述J2EE框架的多层结构,并简要说明各层的作用. 解答: 1) Presentation layer(表示层) a. 表示逻辑(生成界面代码) b. 接收请求 c. 处理业务层抛出的异常 d. 负责 ...
- json中的日期格式转换(扩展new date()显示格式)
在java spring mvc 开发过程中,通过json 格式,向前端传递数据,日期格式发生了转变, 在前台数据展示时,要进行一定格式的转换才能正常显示: 我在开发中使用了easy ui 和my ...
- 在Intellij IDEA下用X-debug调试PHP
用Intellij IDEA使用X-debug来调试PHP,主要需要配置的部分有三个地方,分别为php.ini的配置,IDEA的配置和浏览器的配置,主要如下: php.ini(wamp修改的是phpF ...
- SmartUI2.0后续声明
感谢很多朋友关注,因为今年一直在另外一个公司做顾问,网络环境管制相当严格,所以一直没有更新博客. 同时也很抱歉,SmartUI 2.0一直都没有下文.在次声明一下,SmartUI一直都在做,只不过Sm ...
- java调用oracle函数
/** * 调用函数取得数据表的ID值 * @param tableName 表名 * @return * @throws SQLException */ public String callFun( ...
- Eclipse下导入外部jar包的3种方式
http://blog.csdn.net/mazhaojuan/article/details/21403717
- 使用python封装get+post请求
思路: 将平时用的多的get和post请求封装,提高代码重用率. 其中Session类可以通过实例化,保存cookie信息,可以在程序结束前多次通过保存的cookie信息保持登录状态的访问. 那么为什 ...