如何使用PHP OPCache?

时间:2013-06-20 22:16:54

标签: php opcache

PHP 5.5已经发布,它具有一个名为OPCache的新代码缓存模块,但似乎没有任何文档。

那么它的文档在哪里?我如何使用OPcache?

5 个答案:

答案 0 :(得分:368)

安装

默认情况下,在PHP5.5 +上编译OpCache。但是默认情况下它被禁用。要在PHP5.5 +中开始使用OpCache,首先必须启用它。为此,您必须执行以下操作。

将以下行添加到php.ini

zend_extension=/full/path/to/opcache.so (nix)
zend_extension=C:\path\to\php_opcache.dll (win)

请注意,当路径包含空格时,您应将其用引号括起来:

zend_extension="C:\Program Files\PHP5.5\ext\php_opcache.dll"

另请注意,您必须使用zend_extension指令而不是“普通”extension指令,因为它会影响实际的Zend引擎(即运行PHP的内容)。

用法

目前您可以使用四种功能:

opcache_get_configuration()

返回包含OpCache当前使用的配置的数组。这包括所有ini设置以及版本信息和列入黑名单的文件。

var_dump(opcache_get_configuration());

opcache_get_status()

这将返回一个数组,其中包含有关缓存当前状态的信息。此信息将包括以下内容:缓存所处的状态(启用,重新启动,完全等),内存使用情况,命中,未命中以及一些更有用的信息。它还将包含缓存的脚本。

var_dump(opcache_get_status());

opcache_reset()

重置整个缓存。这意味着所有可能的缓存脚本将在下次访问时再次解析。

opcache_reset();

opcache_invalidate()

使特定缓存脚本无效。这意味着在下次访问时将再次解析脚本。

opcache_invalidate('/path/to/script/to/invalidate.php', true);

维护和报告

创建了一些GUI来帮助维护OpCache并生成有用的报告。这些工具利用了上述功能。

<强> OpCacheGUI

免责声明我是该项目的作者

特点:

  • OpCache状态
  • OpCache配置
  • OpCache统计
  • OpCache重置
  • 缓存脚本概述
  • 缓存脚本失效
  • 多语言
  • 移动设备支持
  • 闪亮的图表

截图:

status

cached-scripts

graphs

mobilr

网址:https://github.com/PeeHaa/OpCacheGUI

<强> opcache状态

特点:

  • OpCache状态
  • OpCache配置
  • OpCache统计
  • 缓存脚本概述
  • 单个文件

截图:

status

网址:https://github.com/rlerdorf/opcache-status

<强> opcache桂

特点:

  • OpCache状态
  • OpCache配置
  • OpCache统计
  • OpCache重置
  • 缓存脚本概述
  • 缓存脚本失效
  • 自动刷新

截图:

opcache-gui-overview

网址:https://github.com/amnuts/opcache-gui

答案 1 :(得分:151)

OPcache取代APC

由于OPcache旨在取代APC模块,因此无法在PHP中并行运行它们。这对于缓存PHP操作码很好,因为它们不会影响你编写代码的方式。

但是,这意味着如果您当前正在使用APC存储其他数据(通过apc_store()功能),那么如果您决定使用OPCache,则无法执行此操作。

您需要使用另一个库,例如APCuYac,它们都将数据存储在共享的PHP内存中,或者切换为使用memcached之类的内容,后者在单独的进程中将数据存储在内存中到PHP。

此外,OPcache没有相当于APC中存在的上传进度表。相反,您应该使用Session Upload Progress

OPcache的设置

可以找到here的OPcache文档,其中列出了所有配置选项here。建议的设置是:

; Sets how much memory to use
opcache.memory_consumption=128

;Sets how much memory should be used by OPcache for storing internal strings 
;(e.g. classnames and the files they are contained in)
opcache.interned_strings_buffer=8

; The maximum number of files OPcache will cache
opcache.max_accelerated_files=4000

;How often (in seconds) to check file timestamps for changes to the shared
;memory storage allocation.
opcache.revalidate_freq=60

;If enabled, a fast shutdown sequence is used for the accelerated code
;The fast shutdown sequence doesn't free each allocated block, but lets
;the Zend Engine Memory Manager do the work.
opcache.fast_shutdown=1

;Enables the OPcache for the CLI version of PHP.
opcache.enable_cli=1

如果您使用任何使用代码注释的库或代码,则必须启用保存注释:

opcache.save_comments=1
  

如果禁用,则从代码中删除所有PHPDoc注释以减少   优化代码的大小。禁用“文档评论”可能会中断   一些现有的应用程序和框架(例如Doctrine,ZF2,   PHPUnit的)

答案 2 :(得分:19)

对于我使用opcache的事情,我会花两美分。

我已经制作了一个包含大量字段和验证方法以及枚举的广泛框架,以便能够与我的数据库进行对话。

没有opcache

当使用没有opcache的脚本时,我会在2.8秒内将9000个请求推送到apache服务器,它会在90-100%cpu上最大化70-80秒,直到它赶上所有请求。

Total time taken: 76085 milliseconds(76 seconds)

启用opcache

启用opcache后,它以25-30%的cpu时间运行大约25秒,并且永远不会超过25%的cpu使用。

Total time taken: 26490 milliseconds(26 seconds)

我已经制作了一个opcache黑名单文件来禁用除框架之外的所有内容的缓存,这些内容都是静态的,不需要更改功能。我明确选择框架文件,以便我可以开发而不必担心重新加载/验证缓存文件。将所有内容缓存后,会在请求总数25546 milliseconds

上保留一秒

这显着扩展了我每秒可以处理的数据/请求数量,而服务器甚至不会出汗。

答案 3 :(得分:4)

在Amazon Linux上使用PHP 5.6(在RedHat或CentOS上应该是相同的):

yum install php56-opcache

然后重启apache。

答案 4 :(得分:2)

我在设置moodle时遇到过这种情况。 我在php.ini文件中添加了以下行。

zend_extension=C:\xampp\php\ext\php_opcache.dll

[opcache]
opcache.enable = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 4000
opcache.revalidate_freq = 60

; Required for Moodle
opcache.use_cwd = 1
opcache.validate_timestamps = 1
opcache.save_comments = 1
opcache.enable_file_override = 0

; If something does not work in Moodle
;opcache.revalidate_path = 1 ; May fix problems with include paths
;opcache.mmap_base = 0x20000000 ; (Windows only) fix OPcache crashes with event id 487

; Experimental for Moodle 2.6 and later
;opcache.fast_shutdown = 1
;opcache.enable_cli = 1 ; Speeds up CLI cron
;opcache.load_comments = 0 ; May lower memory use, might not be compatible with add-ons and other apps

extension=C:\xampp\php\ext\php_intl.dll

[intl]
intl.default_locale = en_utf8
intl.error_level = E_WARNING

intl - &gt; http://php.net/manual/en/book.intl.php