• 不重新编译php安装配置eAccelerator


    eAccelerator属于一个免费的开源php加速、优化、编译和动态缓存项目,原理和apc类似,都是通过缓存php编译后的opcode代码来提高php脚本的执行性能,而且eAccelerator本身的开销也是极少的。

    注:目前最新的php5.5+还未推出适合的版本

    本文已经更新到个人博客 http://ifxoxo.com/php_eaccelerator.html ,转载请留名.

    一、安装eAccelerator

    1、下载

    eAccelerator可以到 https://github.com/eaccelerator/eaccelerator/tarball/master 下载最新版本。

    目前下载到的最新版本是eaccelerator-42067ac.tar

    如果打不开github,可以到我网盘去下载 http://pan.baidu.com/s/1pJ5IItt

    2、安装

    前提:找到php的安装目录, 楼主是安装在 /usr/local/php

    下载完毕之后,就通过phpize安装扩展的方式,进行安装

    tar zxvf eaccelerator - eaccelerator - 42067ac.tar

    cd eaccelerator - eaccelerator - 42067ac    #进入目录

    / usr / local / php / bin / phpize      #执行php安装目录下的phpize

    . / configure -- enable - eaccelerator = shared -- with - php - config = / usr / local / php / bin / php - config    #进行配置

    make

    make install

    顺利的话,eAccelerator就安装完毕了,并且在你的扩展目录下,生成一个eaccelerator.so文件。接下来就是配置和启动了。

    3、配置

    找到php.ini的位置,然后进行编辑,添加以下信息

    extension = eaccelerator . so  

    eaccelerator . shm_size = "64"

    eaccelerator . cache_dir = "/data/logs/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"

    eaccelerator . keys      = "disk_only"

    eaccelerator . sessions = "disk_only"

    eaccelerator . content    = "disk_only"

    然后要创建cache_dir的目录

    mkdir - p / data / logs / tmp / eaccelerator

    chmod 777 / data / logs / tmp / eaccelerator

    各个配置的意思:

    • shm_size : 可使用的共享内存大小(单位为MB)
    • cache_dir : 缓存存放的路径
    • enable : 打开或者关闭eaccelerator。”1″指打开,”0″指关闭。默认值为”1″。
    • optimizer :打开或者关闭代码优化,开启可以加快代码的执行速度。”1″指打开,”0″指关闭。默认值为”1″。
    • check_mtime : 以文件的修改时间为依据,判断是不是要重新生成缓存。”1″指打开,”0″指关闭。默认值为”1″。当关闭此项时,如果php文件被修改,则需要手工删除eaccelerator缓存,才能显示被修改的php文件。
    • debug : 打开或者关闭调试记录。当打开时,eaccelerator会将对一个缓存文件的每次请求都写进log。默认为0
    • filter : 指定被缓存的后缀文件。默认值为””,表示缓存所有的PHP文件。
    • shm_max :用户使用例如eaccelerator_put之类的函数能够往共享内存中加载的最大数据。默认值为”0″,表示不限制。(单位为字节)
    • shm_ttl :当没有足够的空闲共享内存去尝试缓冲一个新脚本时,将删除至少在shm_ttl秒之前没有被访问过的文件。默认值为”0″,表示不尝试从共享内存中删除任何旧的脚本。(单位为秒)
    • shm_prune_period :当没有足够的空闲共享内存去尝试缓冲一个新脚本时,将删所有旧脚本,前提是这个尝试在超过shm_prune_period秒之前被执行过。默认值为”0″,表示不尝试从共享内存中删除任何旧的脚本。(单位为秒)
    • shm_only :打开或者关闭在磁盘上缓存编译过的脚本。这个参数对会话数据和内容缓存没有效果。默认值为”0″,表示使用磁盘和共享内存来缓存。
    • compress : 打开或者关闭缓存内容压缩。”1″指打开,”0″指关闭。默认值为”1″。
    • compress_level : 内存压缩的级别。默认值为”9″,表示最大压缩。

    4、启动eaccelerator

    如果是apache,重启apache如果是php-fpm,重启php-fpm进程。

    启动之后,可以在cache_dir中看到类似这样的文件夹。

    二、监控eaccelerator的运行情况

    eaccelerator提供了监控运行情况的页面,但是得特殊配置。

    (1)复制control.php

    eAccelerator控制面板的地址,安装包里有一个control.php文件,把它复制到网站的指定目录。

    (2)php.ini中增加allowed_admin_path

    在刚才配置php.ini的地方,再增加一个选项,指向网站的根目录。

    eaccelerator . allowed_admin_path = / data / www /

    (3)重启apache或者php-fpm

    重启之后,访问你刚才的control.php,就可以看到这个页面了。需要登录,

    • 用户名:admin,
    • 密码:eAccelerator。

    如果想修改密码,直接编辑control.php ,在前面几行进行修改。

    ifxoxo.com

    三、eaccelerator的加速效果

    安装之后,写了一段排序代码,分别用了ab和webbench进行压力测试,看看加速效果如何。ab测试在正常的情况下的提速效果,webbench则测试在满负载下的提速效果。

    1、ab测试正常测试

    用 ab -n 10000 -c 500 进行测试

    (1) 没启动eaccelerator

    ifxoxo.com

    关键指标

    每秒事务数 : Requests per second: 2366.20 [#/sec] (mean)

    平均事务响应时间 :Time per request: 211.309 [ms] (mean)

    (2) 启动了eaccelerator

    关键指标

    每秒事务数 : Requests per second: 3274.80 [#/sec] (mean)

    平均事务响应时间 :Time per request: 152.681 [ms] (mean)

    (3) 结论

    正常测试(不是最高负载)的情况下:

    • 每秒事务数 提高了 38%
    • 平均事务响应时间 缩短了 28%

    2、用webbench测试最高负载

    逐渐提高压力,直到达到最高负载的时候。命令为: webbench -c 1000 -t 10

    (1) 没启动eaccelerator

    关键指标speed=327078 pages/min

    (2) 启动eaccelerator

    关键指标speed=629718 pages/min

    (3) 结论

    在服务器满负载工作的情况下, 每分钟的页面处理数 提高了 92.5% ,真是一个令人吃惊的飞跃。

    3、测试结论

    • 在正常的情况下,启动eaccelerator,php提速了接近30%。
    • 在满负载情况下,启动eaccelerator,php提速了惊人的90%。

    当然,实际情况下,php不单单是排序,还有数据库连接、网络请求等的,提速效果可能没有这么好,但是,肯定也是有不错的效果的。

    4、附带测试代码

    <?php

    $seed = rand ( 1 , 4 ) ;

    $arr = array ( 1 , 43 , 54 , 62 , 21 , 66 , 32 , 78 , 36 , 76 , 39 ) ;   

    switch ( $seed ) {

    case '1' :

    $a = getpao ( $arr ) ;

    case '2' :

    $a = select_sort ( $arr ) ;

    case '3' :

    $a = insert_sort ( $arr ) ;

    case '4' :

    $a = quick_sort ( $arr ) ;

    }

    //冒泡排序

    function getpao ( $arr ) {   

    $len = count ( $arr ) ;

    for ( $i = 1 ; $i < $len ; $i ++ ) {

    for ( $k = 0 ; $k < $len - $i ; $k ++ ) {

    if ( $arr [ $k ] > $arr [ $k + 1 ] ) {

    $tmp = $arr [ $k + 1 ] ;

    $arr [ $k + 1 ] = $arr [ $k ] ;

    $arr [ $k ] = $tmp ;

    }

    }

    }

    return $arr ;

    }

    //选择排序

    function select_sort ( $arr ) {

    for ( $i = 0 , $len = count ( $arr ) ; $i < $len - 1 ; $i ++ ) {

    $p = $i ;

    for ( $j = $i + 1 ; $j < $len ; $j ++ ) {

    if ( $arr [ $p ] > $arr [ $j ] ) {

    $p = $j ;

    }

    }

    if ( $p != $i ) {

    $tmp = $arr [ $p ] ;

    $arr [ $p ] = $arr [ $i ] ;

    $arr [ $i ] = $tmp ;

    }

    }

    return $arr ;

    }

    //插入排序

    function insert_sort ( $arr ) {

    for ( $i = 1 , $len = count ( $arr ) ; $i < $len ; $i ++ ) {

    $tmp = $arr [ $i ] ;

    for ( $j = $i - 1 ; $j >= 0 ; $j -- ) {

    if ( $tmp < $arr [ $j ] ) {

    $arr [ $j + 1 ] = $arr [ $j ] ;

    $arr [ $j ] = $tmp ;

    } else {

    break ;

    }

    }

    }

    return $arr ;

    }

    //快速排序

    function quick_sort ( $arr ) {

    $length = count ( $arr ) ;

    if ( $length <= 1 ) {

    return $arr ;

    }

    $base_num = $arr [ 0 ] ;

    $left_array = array ( ) ; //小于标尺的

    $right_array = array ( ) ; //大于标尺的

    for ( $i = 1 ; $i < $length ; $i ++ ) {

    if ( $base_num > $arr [ $i ] ) {

    $left_array [ ] = $arr [ $i ] ;

    } else {

    $right_array [ ] = $arr [ $i ] ;

    }

    }

    $left_array = quick_sort ( $left_array ) ;

    $right_array = quick_sort ( $right_array ) ;

    return array_merge ( $left_array , array ( $base_num ) , $right_array ) ;

    }

    ?>

  • 相关阅读:
    Node Node
    二叉排序树的实现
    Matlab Tricks(十五) —— 圆的正确画法
    Matlab Tricks(十五) —— 圆的正确画法
    Matlab Tricks(十四) —— 句柄(handle)(图形对象属性的读取与修改)
    Matlab Tricks(十四) —— 句柄(handle)(图形对象属性的读取与修改)
    (机器学习/计算机视觉/深度学习)代码
    (机器学习/计算机视觉/深度学习)代码
    论文的发表流程、会议的组织流程
    论文的发表流程、会议的组织流程
  • 原文地址:https://www.cnblogs.com/wajika/p/6249036.html
Copyright © 2020-2023  润新知