zend optimizer,作用是php的代码优化,在php的执行过程中,在将php文件从磁盘读取到内存之后,要对php文件内的代码进行编译,生成OPCODE代码,然后Zend engine运行Opcode代码,Zend Optimizer的作用就是将编译生成的OPcode代码进行优化。本来是想安装在Ubuntu上的,可惜ZO暂时不支持5.3,所以只好在CentOS下安装了。CendOS中安装的是默认的php5.1.6的版本。
之前这东西也是在公司电脑上安装了,现在自己电脑也来整一下吧,为了测试效果,我先运行了一个bench的php文件,运行结果如下:
simple 0.463
simplecall 0.357
simpleucall 0.581
simpleudcall 0.633
mandel 0.936
mandel2 1.238
ackermann(7) 0.665
ary(50000) 0.089
ary2(50000) 0.048
ary3(2000) 0.430
fibo(30) 1.617
hash1(50000) 0.068
hash2(500) 0.077
heapsort(20000) 0.255
matrix(20) 0.252
nestedloop(12) 0.508
sieve(30) 0.239
strcat(200000) 0.047
Total 8.503
单位都是秒,俺准备安装好Zend Optimizer之后再来运行一遍,看看运行时间是否有所改善。
先下载Zend Optimizer
http://downloads.zend.com/optimizer/3.3.9/ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz
我下载的是i386版本的,需要下载64位版本的可以下载相应版本。
#tar -xzvf ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz
#cd ZendOptimizer-3.3.9-linux-glibc23-i386
#cd data
#cd 5_1_x_comp
#cp ZendOptimizer.so /usr/lib/php/modules/
然后修改/etc/php.ini配置文件
加入如下两行
zend_optimizer.optimization_level=15 #启动多少优化过程
zend_extension=/usr/lib/php/modules/ZendOptimizer.so
然后重启下httpd服务,用phpinfo()查看,发现了
This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies
with Zend Optimizer v3.3.3, Copyright (c) 1998-2007, by Zend Technologies
表示Zend Optimizer已经成功安装。既然安装好了,那么下面我再运行一下bench文件看看结果如何:
simple 0.252
simplecall 0.401
simpleucall 0.665
simpleudcall 0.561
mandel 0.831
mandel2 1.089
ackermann(7) 0.689
ary(50000) 0.065
ary2(50000) 0.047
ary3(2000) 0.420
fibo(30) 1.566
hash1(50000) 0.078
hash2(500) 0.084
heapsort(20000) 0.279
matrix(20) 0.236
nestedloop(12) 0.427
sieve(30) 0.223
strcat(200000) 0.044
Total 7.956
运行了几次,基本稳定在8s左右,比安装之前快了大概0.5秒,比想象中的有差距,似乎优化效果有限,不过这也跟我的测试数据有关了,测试的很不全面,这个就先到这里了,接下来来安装下eAccelerator,看二者结合效果如
何。
还是先下载eAccelerator,关于此加速器的介绍可以参见:http://baike.baidu.com/view/1376127.htm?fr=ala0_1_1
eAccelerator的下载地址:http://bart.eaccelerator.net/source/0.9.6/eaccelerator-0.9.6.tar.bz2
#bzip2 -d eaccelerator-0.9.6.tar.bz2
#tar -xvf eaccelerator-0.9.6.tar
#cd eaccelerator-0.9.6
#/usr/bin/phpize
#./configure --enable-eaccelerator=shared --with-php-config=/usr/bin/php-config
#make
#cp modules/eaccelerator.so /usr/lib/php/modules/
以上路径请注意自己机器的相应路径,然后就需要配置php.ini文件了
#vim /etc/php.ini
添加信息如下:
[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.log_file=/var/log/httpd/eaccelerator.log
eaccelerator.filter=
eaccelerator.shm_max=0
eaccelerator.shm_ttl=0
eaccelerator.shm_prune_period=0
eaccelerator.shm_only=0
关于选项的具体含义此处有详细解释:http://www.php100.com/html/open-php/qitakaiyuan/2010/0511/4487.html
修改完php.ini文件后,设置一下缓存文件夹的权限
#mkdir /tmp/eaccelerator
#chmod 777 /tmp/eaccelerator
然后重启httpd服务器,然后查看phpinfo(),在其中有如下记录:
This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies
with eAccelerator v0.9.6, Copyright (c) 2004-2010 eAccelerator, by eAccelerator
with Zend Optimizer v3.3.3, Copyright (c) 1998-2007, by Zend Technologies
说明eAccelerator安装成功,现在看看二者结合的优化效果如何。
simple 0.243
simplecall 0.381
simpleucall 0.525
simpleudcall 0.612
mandel 0.856
mandel2 1.054
ackermann(7) 0.669
ary(50000) 0.049
ary2(50000) 0.043
ary3(2000) 0.395
fibo(30) 1.601
hash1(50000) 0.082
hash2(500) 0.076
heapsort(20000) 0.237
matrix(20) 0.223
nestedloop(12) 0.393
sieve(30) 0.218
strcat(200000) 0.041
Total 7.698
差不多又快了0.5s的样子,所以二者结合起来确实起到了加快执行速度的作用,虽然减少的时间并没有很多,可能跟我测试文件本身的问题有关,因为主要是计算类的,对cpu要求高,所以能减少近一秒钟的执行时间也已经很不错了,这个就暂时写到这里了,具体的内部机制还要慢慢研究了。