认识缓存之Opcode缓存

一、php加速器介绍

    一个php程序在运行完成后,内存马上释放,基本上所有数据都在此时销毁(仅有极少数据会缓存),也就是说此时计算机内存中基本上不存在这个php代码中的数据,这和常驻内存的java等语言有显著区别。这种缓存机制具有如下的优缺点:

    优点:有效避免内存泄露,内存回收机制更简单,避免因为一个程序的问题而连累整个服务器。

    缺点:无法复用已有数据,每个php请求都得重复执行请求--翻译--执行的过程,重复过多。

    opcode(Operation code,操作码)缓存就是虚拟机把php代码编译成一种中间码的结果缓存起来(可以缓存到磁盘或内存)。下一次php运行此页面时,只要直接解析这些代码就可以了。这样省去了Flex语法器进行语法编译和大部分语法检查(这个语法检查在多个阶段均存在)的过程,一定程度上提高了php运行速度,减轻了服务器负荷。

   注意:opcode不是php的专有名词。php的opcode是一种php脚本编译后的中间语言,就像java的bytecode,php的语言引擎Zend执行php代码时,会把php代码经过分成token,语法分析的过程转换成opcode,然后顺序执行。

二、支持缓存Opcode的php插件

    1、eAccelerator

    eAccelerator是一个自由开放源码PHP加速器,优化和动态内容缓存,提高了PHP脚本的缓存性能,使得PHP脚本在编译的状态下,对服务器的开销几乎完全消除。 它还有对脚本起优化作用,以加快其执行效率。使PHP程序代码执效率能提高1-10倍。从文字上可以理解为:eAccelerator是PHP加速器扩展。

    2、APC缓存

    Alternative PHP Cache (APC缓存)是一种对PHP有效的开放源高速缓冲储存器工具,他能够缓存Opcode(目标文件)的PHP中间码。 APC的缓存分两部分:系统缓存和用户数据缓存. 系统缓存 是自动使用的,是指APC把PHP文件源码的编译结果缓存起来,然后在再次调用时先对比时间标记。如果未过期,则使用缓存代码运行。默认缓存 3600s(一小时).但是这样仍会浪费大量CPU时间.因此可以在php.ini中设置system缓存为永不过期(apc.ttl=0).不过如果这样设置,改运PHP代码后需要restart一下您的web服务器(比如apache…).目前对APC的性能测试一般指的是这一层cache;从文字上理到:Alternative PHP Cache(APC缓存)也算是一种内存缓存扩展,算是数据库缓存扩展。

    3、Xcache

    是一个开源的opcode缓存器/优化器, 他能够提高服务器上的PHP性能,他通过把编译PHP后的数据缓冲到共享内存从而避免重复的编译过程, 能够直接使用缓冲区已编译的代码从而提高速度. 通常能够提高您的页面生成速率2到5倍, 降低服务器负载。 其实它与eAccelerator一样是PHP加速器扩展。

    4、以上三种缓存性能测试(来自于网上)

  请求时间(秒) 单次请求时间(毫秒) 最大内存占用(MB) 最小内存占用(MB)
None 10.41 96.08 24 24
APC 30.45 32.84 21 21
eAccelerator 31.26 31.99 23 18
XCache 30.28 33.02 29 19

    ①通过测试得出eAccelerator在请求时间和内存占用综合方面是最好的。

    ②通过测试得出使用加速器比无加速器在请求时间快了3倍左右。

    注意:如果需要安装,可以参考该文章http://www.cnblogs.com/lonelybyte/archive/2010/02/08/1666000.html

    5、opcache

    大家知道目前PHP的缓存插件一般有三个:APC、eAccelerator、XCache,但未来它们可能都会消失,因为PHP 5.5已经集成Zend Opcache,功能和前三者相似但又有少许不同,缓存速度据说比它们更快。

    这几个PHP加速插件的主要原理都相同,就是把PHP执行后的数据缓冲到内存中从而避免重复的编译过程,能够直接使用缓冲区已编译的代码从而提高速度,降低服务器负载,它们的效率是显而易见的,像庞大的CMS,每次打开一个页面要调用数十个PHP文件,执行数万行代码,效率可想而知,在安装APC等加速器后打开页面的速度明显加快。

    Zend Opcache 已经集成在了PHP 5.5里面,编译安装PHP5.5的时候加上--enable-opcache就行了。但也支持低版本的 PHP 5.2.*, 5.3.*, 5.4.*,未来会取消对5.2的支持。下面是我在PHP 5.4下的安装方法:

    依次执行下面的命令

  • wget http://pecl.php.net/get/zendopcache-7.0.2.tgz
  • tar xzf zendopcache-7.0.2.tgz
  • cd zendopcache-7.0.2
  • /usr/local/php/bin/phpize(注意:如果找不到phpize 的话自己找PHP路径,我的在/usr/local/php/bin/phpize)
  • ./configure --with-php-config=/usr/local/php/bin/php-config
  • make
  • make install

    如果显示Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20100525/ 表示安装完成,下面要修改php的配置文件让它生效。
    在 php.ini 的最后面加入下面几行
zend_extension=/usr/local/php/lib/php/extensions/no-debug-zts-20100525/opcache.so
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1
    注意:128意思是给它分配128M内存,然后重启apache,用phpinfo查看是否生效,显示下面的信息就说明生效了


    在phpinfo页面的下面可以看到的运行状态:

    优点:有效避免内存泄露,内存回收机制更简单,避免因为一个程序的问题而连累整个服务器。

    缺点:无法复用已有数据,每个php请求都得重复执行请求--翻译--执行的过程,重复过多。

    opcode(Operation code,操作码)缓存就是虚拟机把php代码编译成一种中间码的结果缓存起来(可以缓存到磁盘或内存)。下一次php运行此页面时,只要直接解析这些代码就可以了。这样省去了Flex语法器进行语法编译和大部分语法检查(这个语法检查在多个阶段均存在)的过程,一定程度上提高了php运行速度,减轻了服务器负荷。

   注意:opcode不是php的专有名词。php的opcode是一种php脚本编译后的中间语言,就像java的bytecode,php的语言引擎Zend执行php代码时,会把php代码经过分成token,语法分析的过程转换成opcode,然后顺序执行。

二、支持缓存Opcode的php插件

    1、eAccelerator

    eAccelerator是一个自由开放源码PHP加速器,优化和动态内容缓存,提高了PHP脚本的缓存性能,使得PHP脚本在编译的状态下,对服务器的开销几乎完全消除。 它还有对脚本起优化作用,以加快其执行效率。使PHP程序代码执效率能提高1-10倍。从文字上可以理解为:eAccelerator是PHP加速器扩展。

    2、APC缓存

    Alternative PHP Cache (APC缓存)是一种对PHP有效的开放源高速缓冲储存器工具,他能够缓存Opcode(目标文件)的PHP中间码。 APC的缓存分两部分:系统缓存和用户数据缓存. 系统缓存 是自动使用的,是指APC把PHP文件源码的编译结果缓存起来,然后在再次调用时先对比时间标记。如果未过期,则使用缓存代码运行。默认缓存 3600s(一小时).但是这样仍会浪费大量CPU时间.因此可以在php.ini中设置system缓存为永不过期(apc.ttl=0).不过如果这样设置,改运PHP代码后需要restart一下您的web服务器(比如apache…).目前对APC的性能测试一般指的是这一层cache;从文字上理到:Alternative PHP Cache(APC缓存)也算是一种内存缓存扩展,算是数据库缓存扩展。

    3、Xcache

    是一个开源的opcode缓存器/优化器, 他能够提高服务器上的PHP性能,他通过把编译PHP后的数据缓冲到共享内存从而避免重复的编译过程, 能够直接使用缓冲区已编译的代码从而提高速度. 通常能够提高您的页面生成速率2到5倍, 降低服务器负载。 其实它与eAccelerator一样是PHP加速器扩展。

    4、以上三种缓存性能测试(来自于网上)

  请求时间(秒) 单次请求时间(毫秒) 最大内存占用(MB) 最小内存占用(MB)
None 10.41 96.08 24 24
APC 30.45 32.84 21 21
eAccelerator 31.26 31.99 23 18
XCache 30.28 33.02 29 19

    ①通过测试得出eAccelerator在请求时间和内存占用综合方面是最好的。

    ②通过测试得出使用加速器比无加速器在请求时间快了3倍左右。

    注意:如果需要安装,可以参考该文章http://www.cnblogs.com/lonelybyte/archive/2010/02/08/1666000.html

    5、opcache

    大家知道目前PHP的缓存插件一般有三个:APC、eAccelerator、XCache,但未来它们可能都会消失,因为PHP 5.5已经集成Zend Opcache,功能和前三者相似但又有少许不同,缓存速度据说比它们更快。

    这几个PHP加速插件的主要原理都相同,就是把PHP执行后的数据缓冲到内存中从而避免重复的编译过程,能够直接使用缓冲区已编译的代码从而提高速度,降低服务器负载,它们的效率是显而易见的,像庞大的CMS,每次打开一个页面要调用数十个PHP文件,执行数万行代码,效率可想而知,在安装APC等加速器后打开页面的速度明显加快。

    Zend Opcache 已经集成在了PHP 5.5里面,编译安装PHP5.5的时候加上--enable-opcache就行了。但也支持低版本的 PHP 5.2.*, 5.3.*, 5.4.*,未来会取消对5.2的支持。下面是我在PHP 5.4下的安装方法:

    依次执行下面的命令

  • wget http://pecl.php.net/get/zendopcache-7.0.2.tgz
  • tar xzf zendopcache-7.0.2.tgz
  • cd zendopcache-7.0.2
  • /usr/local/php/bin/phpize(注意:如果找不到phpize 的话自己找PHP路径,我的在/usr/local/php/bin/phpize)
  • ./configure --with-php-config=/usr/local/php/bin/php-config
  • make
  • make install

    如果显示Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20100525/ 表示安装完成,下面要修改php的配置文件让它生效。
    在 php.ini 的最后面加入下面几行
zend_extension=/usr/local/php/lib/php/extensions/no-debug-zts-20100525/opcache.so
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1
    注意:128意思是给它分配128M内存,然后重启apache,用phpinfo查看是否生效,显示下面的信息就说明生效了


    在phpinfo页面的下面可以看到的运行状态:

猜你喜欢

转载自student-lp.iteye.com/blog/2100510
今日推荐