• 使用opcache为你的网站加速(转载)


    [文章作者:磨延城 转载请注明原文出处: https://mo2g.com/view/137/ ]

    可能很多朋友在接触PHP的时候或多或少了解到:PHP是脚本语言、一种解释型语言,所以它不需要经过编译就能运行,诸如此类. 这种说法虽然并不完全正确,但对于初学者来说,这么理解或许还比较合适,不仅能快速入门,调试代码还挺方便.但当你想要优化基于PHP开发的网站,以支持更高的并发访问时,就得了解什么是Opcodes.

    可能很多朋友在接触PHP的时候或多或少了解到:PHP是脚本语言、一种解释型语言,所以它不需要经过编译就能运行,诸如此类。

    这种说法虽然并不完全正确,但对于初学者来说,这么理解或许还比较合适,不仅能快速入门,调试代码还挺方便。但当你想要优化基于PHP开发的网站,以支持更高的并发访问时,就得了解什么是Opcodes。

     默认情况,PHP对每一个请求,都会进行代码解析、编译等一系列处理生成对应的操作码,最后通过Zend引擎执行。如图所示:

    没有Opcodes缓存

    引用Laruence的例子

    1
    2
    3
    4
    5
    <?php
    echo "Hello World";
    $a = 1 + 1;
    echo $a;
    ?>

    PHP执行这段代码会经过如下4个步骤(确切的来说,应该是PHP的语言引擎Zend)
    1.Scanning(Lexing) ,将PHP代码转换为语言片段(Tokens)
    2.Parsing, 将Tokens转换成简单而有意义的表达式
    3.Compilation, 将表达式编译成Opocdes
    4.Execution, 顺次执行Opcodes,每次一条,从而实现PHP脚本的功能。

    Opcodes缓存的作用正是把编译好的操作码保存一段时间,让Zend引擎在之后的请求中不用再次解析、编译。如图所示:启用Opcodes缓存

    当你在苦苦寻求加快PHP网站响应速度的方法时,我敢说缓存Opcodes就是你要找的方法之一,而且是最容易的。

    本文介绍如何使用Opcache(原名Zend Optimizer Plus,简称O+)给PHP程序加速。O+是由Zend公司开发的一个PHP性能提升工具,不同于其他Opcodes缓存工具, O+除了缓存Opcodes以外, 还做了很多的Opcodes优化。

    从PHP5.5开始, O+已经随着PHP的源代码一起发布了。5.2以上的PHP版本也可以通过编译的方式,加载O+。下载地址http://pecl.php.net/zendopcache

    相同配置下,使用Apache Benchmark进行压力测试,O+的优化效果对比如下:

    ab -c50 -t2 10.0.0.59/ab_test.php

    开启O+:Requests per second:    168.77 [#/sec] (mean)

    关闭O+:Requests per second:    157.44 [#/sec] (mean)

    提高了11.33

    ab_test.php代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    $x = 10000;
    $arr array();
    while($x) {
        $arr[$x] = $x--;
    }
    foreach$arr as $row) {
        echo "$row<br>";
    }

    接下来就把我的安装流程贴出来,因为我是用yum搭建环境的,可能不适用于你的情况,仅供参考。

    1)下载、编译、安装

    1
    2
    3
    4
    5
    6
    7
    wget http://pecl.php.net/get/zendopcache-7.0.3.tgz
    tar zxvf zendopcache-7.0.3.tgz
    cd zendopcache-7.0.3/
    phpize
    ./configure
    make
    make install

    2)编辑php.ini,在文件底部添加配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    vi /etc/php.ini
    zend_extension=/usr/lib64/php/modules/opcache.so
    ;命令行模式是否开启缓存功能,我建议不开启
    opcache.enable_cli=0
    ;共享内存大小, 这个根据你们的需求可调
    opcache.memory_consumption=128
    ;interned string的内存大小, 也可调
    opcache.interned_strings_buffer=8
    ;最大缓存的文件数目
    opcache.max_accelerated_files=4000
    ;60s检查一次文件更新
    opcache.revalidate_freq=60
    ;打开快速关闭, 打开这个在PHP Request Shutdown的时候,回收内存的速度会提高
    opcache.fast_shutdown=1
    ;不保存文件/函数的注释
    opcache.save_comments=0

    3)让php-fpm重新加载配置文件

    1
    /ect/init.d/php-fpm reload

    4)运行如下代码

    1
    2
    <?php
    phpinfo();

    如果能找到类似的文字提示,说明PHP已经成功加载了OPcache。马上体验一下,PHP网站是不是响应更快了呢?

    with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies

  • 相关阅读:
    aud$定位错误用户密码登陆数据库的具体信息
    Linux 磁盘分区、格式化、目录挂载
    Linux RHCS 基础维护命令
    Vertica 6.1不完全恢复启动到LGE方法
    Oracle Recovery 02
    如何删除回滚段状态为NEEDS RECOVERY的undo表空间
    Oracle Recovery 01
    DRA(Data Recovery Advisor)的使用
    Oracle启动报错ORA-27102解决
    jquery remove()不兼容问题解决方案
  • 原文地址:https://www.cnblogs.com/doubilaile/p/8434280.html
Copyright © 2020-2023  润新知