如何使用PHP OPCache?

如何使用PHP OPCache?,php,opcache,Php,Opcache,PHP5.5已经发布,它有一个新的代码缓存模块,名为OPCache,但似乎没有任何关于它的文档 那么,它的文档在哪里?如何使用OPcache?OPcache取代了APC 因为OPcache被设计用来替换APC模块,所以不可能在PHP中并行运行它们。这对于缓存PHP操作码很好,因为这两者都不会影响您编写代码的方式 但是,这意味着如果您当前正在使用APC存储其他数据(通过函数),那么如果您决定使用OPCache,您将无法这样做 您将需要使用另一个库,例如在共享PHP内存中存储数据的库或库,或者切换到

PHP5.5已经发布,它有一个新的代码缓存模块,名为OPCache,但似乎没有任何关于它的文档

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

OPcache取代了APC 因为OPcache被设计用来替换APC模块,所以不可能在PHP中并行运行它们。这对于缓存PHP操作码很好,因为这两者都不会影响您编写代码的方式

但是,这意味着如果您当前正在使用APC存储其他数据(通过函数),那么如果您决定使用OPCache,您将无法这样做

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

此外,OPcache在APC中并没有与上载进度表等价的东西。相反,您应该使用

OPcache的设置 OPcache的文档中列出了所有配置选项。建议的设置为:

;设置要使用的内存量
opcache.memory_consumption=128
;设置OPcache应使用多少内存来存储内部字符串
;(例如,类名及其包含的文件)
opcache.interned_strings_buffer=8
; OPcache将缓存的最大文件数
opcache.max\u加速\u文件=4000
;检查文件时间戳的频率(以秒为单位),以查看对共享文件的更改
;内存存储分配。
opcache.revalidate\u freq=60
;如果启用,则快速停机序列用于加速代码
;快速关闭序列不会释放每个已分配的块,而是让
;Zend引擎内存管理器完成这项工作。
opcache.fast\u shutdown=1
;为CLI版本的PHP启用OPcache。
opcache.enable_cli=1
如果使用任何使用代码注释的库或代码,则必须启用“保存注释”:

opcache.save_comments=1
如果禁用,将从代码中删除所有PHPDoc注释以减少 优化代码的大小。禁用“文档注释”可能会中断 一些现有的应用程序和框架(如条令、ZF2、, PHPUnit)

装置 OpCache默认在PHP5.5+上编译。但是,默认情况下它是禁用的。为了在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
指令,而不是“normal”
extension
指令,因为它会影响实际的zend引擎(即运行PHP的东西)

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

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

var_dump(opcache_get_configuration());
: 这将返回一个数组,其中包含有关缓存当前状态的信息。这些信息包括:缓存的状态(已启用、重新启动、已满等)、内存使用情况、命中、未命中以及一些更有用的信息。它还将包含缓存的脚本

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

opcache_reset();
opcache_invalidate('/path/to/script/to/invalidate.php', true);
: 使特定的缓存脚本无效。这意味着下次访问时将再次解析脚本

opcache_reset();
opcache_invalidate('/path/to/script/to/invalidate.php', true);
维护和报告 创建了一些GUI来帮助维护OpCache和生成有用的报告。这些工具利用了上述功能

OpCacheGUI

免责声明我是这个项目的作者

特点:

  • 操作缓存状态
  • OpCache配置
  • OpCache统计信息
  • 操作缓存重置
  • 缓存脚本概述
  • 缓存脚本失效
  • 多语
  • 移动设备支持
  • 闪亮图形
截图:

网址:

操作缓存状态

特点:

  • 操作缓存状态
  • OpCache配置
  • OpCache统计信息
  • 缓存脚本概述
  • 单个文件
截图:

网址:

操作缓存gui

特点:

  • 操作缓存状态
  • OpCache配置
  • OpCache统计信息
  • 操作缓存重置
  • 缓存脚本概述
  • 缓存脚本失效
  • 自动刷新
截图:


URL:

我将为我使用的opcache投入2美分

我已经建立了一个广泛的框架,其中包含许多字段、验证方法和枚举,以便能够与我的数据库对话

不带opcache

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

所用总时间:76085毫秒(76秒)

启用opcache时

在启用opcache的情况下,它以25-30%的cpu时间运行约25秒,并且从未超过25%的cpu使用率

所用总时间:26490毫秒(26秒)

我已经制作了一个opcache黑名单文件,以禁用除框架之外的所有内容的缓存,框架是静态的,不需要更改功能。我只显式地选择框架文件,这样我就可以开发,而不用担心重新加载/验证缓存文件。缓存所有内容可以节省请求总数的一秒钟
25546毫秒


这大大增加了我每秒可以处理的数据/请求的数量,而服务器甚至不会感到汗流浃背。

我在设置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->

在Amazon上使用PHP5.6