如何使用PHP OPCache?
PHP 5.5已经发布,它具有一个名为OPCache的新代码caching模块,但似乎没有任何文档。
那么它的文档在哪里,如何使用OPcache?
安装
OpCache默认在PHP5.5 +上编译。 但是它默认是禁用的。 为了在PHP5.5 +中开始使用OpCache,您首先必须启用它。 要做到这一点,你必须做到以下几点。
php.ini
下行添加到您的php.ini
:
zend_extension=/full/path/to/opcache.so (nix) zend_extension=C:\path\to\php_opcache.dll (win)
请注意,如果path包含空格,则应将其用引号括起来:
zend_extension="C:\Program Files\PHP5.5\ext\php_opcache.dll"
另外请注意,您必须使用zend_ extension
指令而不是“正常” extension
指令,因为它会影响实际的Zend引擎(即运行PHP的东西)。
用法
目前有四个function可以使用:
opcache_get_configuration()
:
返回包含OpCache使用的当前使用configuration的数组。 这包括所有ini设置以及版本信息和黑名单文件。
var_dump(opcache_get_configuration());
opcache_get_status()
:
这将返回一个数组,其中包含有关caching当前状态的信息。 这些信息将包括:caching所在的状态(启用,重启,完整等),内存使用情况,命中,未命中以及一些更有用的信息。 它也将包含caching的脚本。
var_dump(opcache_get_status());
opcache_reset()
:
重置整个caching。 意味着所有可能的caching脚本将在下次访问时再次被parsing。
opcache_reset();
opcache_invalidate()
:
使特定的caching脚本无效。 这意味着脚本将在下次访问时再次被parsing。
opcache_invalidate('/path/to/script/to/invalidate.php', true);
维护和报告
创build了一些GUI来帮助维护OpCache并生成有用的报告。 这些工具利用上述function。
OpCacheGUI
免责声明我是这个项目的作者
特征:
- OpCache状态
- OpCacheconfiguration
- OpCache统计信息
- OpCache重置
- caching的脚本概述
- caching的脚本失效
- 多种语言
- 移动设备支持
- shiny的图表
截图:
URL: https : //github.com/PeeHaa/OpCacheGUI
opcache状态
特征:
- OpCache状态
- OpCacheconfiguration
- OpCache统计信息
- caching的脚本概述
- 单个文件
截图:
url: https : //github.com/rlerdorf/opcache-status
opcache贵
特征:
- OpCache状态
- OpCacheconfiguration
- OpCache统计信息
- OpCache重置
- caching的脚本概述
- caching的脚本失效
- 自动刷新
截图:
url: https : //github.com/amnuts/opcache-gui
OPcache取代了APC
由于OPcache旨在replaceAPC模块,因此不可能在PHP中并行运行它们。 这对cachingPHP操作码是好的,因为它不会影响你如何编写代码。
但是,这意味着如果您当前正在使用APC来存储其他数据(通过apc_store()
函数),那么如果您决定使用OPCache,将无法做到这一点。
您将需要使用另一个库,例如APCu或Yac ,这些库都将数据存储在共享的PHP内存中,或者切换到使用类似memcached的内容,这些内存将数据存储在内存中,并以单独的过程存储到PHP中。
而且,OPcache与APC中的上载进度表没有任何相同之处。 相反,你应该使用会话上传进度 。
OPcache的设置
OPcache的文档可以在这里find所有在这里列出的configuration选项。 推荐的设置是:
; Sets how much memory to use opcache.memory_consumption=128 ;Sets how much memory should be used by OPcache for storing internal strings ;(eg 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注释以减less优化代码的大小。 禁用“文档评论”可能会破坏一些现有的应用程序和框架(例如Doctrine,ZF2,PHPUnit)
我将会为我使用opcache而下降两分钱。
我已经制定了一个广泛的框架,有很多领域和validation方法和枚举能够与我的数据库交谈。
没有opcache
在没有使用opcache的情况下使用这个脚本的时候,我会在2.8秒内将9000个请求推送到apache服务器上,这个请求在90-100%cpu的时间最长为70-80秒,直到它赶上所有的请求。
Total time taken: 76085 milliseconds(76 seconds)
随着opcache启用
启用opcache时,CPU运行时间为25-30%,时间约为25秒,CPU使用率从未超过25%。
Total time taken: 26490 milliseconds(26 seconds)
我做了一个opcache黑名单文件禁用caching的一切,除了是静态的,并不需要改变function的框架。 我明确地select了框架文件,这样我就可以开发而不用担心重新加载/validationcaching文件。 让所有的caching在总共25546 milliseconds
的请求上节省了一秒
这极大地扩展了我每秒可以处理的数据/请求的数量,而不需要服务器甚至冒出汗来。
在Amazon Linux上使用PHP 5.6(在RedHat或CentOS上应该是一样的):
yum install php56-opcache
然后重新启动apache。
我在设置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
随着Ubuntu 14.04的发布和PHP 5.5的普及,将会有一个从可选性能caching(APC)转向PHP新的内置OPcache。
这是一个似乎是任何解释性语言的合乎逻辑的举动。 随着网站变得越来越复杂,许多进程正在运行,操作码caching已经成为一种必然 – 幸运的是,它的实现非常简单。
你需要做的OPcache设置是在你的服务器上的php.ini文件进行更改。
在PHP中设置以下设置:
然后configuration下一个设置:
点击这里阅读全文。