在文档中它说“主要用于调试”,这会让我认为“除非你有问题并且需要进行一些调试,否则永远不要启用它”,但是阅读我能找到的关于它的所有内容都说启用它“opcache .enable_cli 1" 但为什么呢?我找不到有关此问题的任何信息,所以如果有人知道,如果文档基本上说将其保持为 0,我为什么要启用它?
3 回答
使用 PHP7 和基于文件的缓存,现在可以为 CLI 启用 opcache。最好的方法是为 CLI 使用单独的 php.ini,配置如下:
opcache.enable=1
opcache.enable_cli=1
opcache.file_cache="/tmp/php-file-cache"
opcache.file_cache_only=1
opcache.file_cache_consistency_checks=1
opcache.file_cache_only=1
确保禁用内存中的 opcache 并且只使用文件,这是 CLI 所需的。这应该会大大增加执行时间。
在 FPM 的 php.ini 中,您将希望具有相同的设置但使用opcache.file_cache_only=0
,因此使用内存中的 opcache 并使用文件缓存作为后备(这也使 FPM 更快,因为文件缓存减少了预热时间FPM 重新启动或 opcache 被重置,因为缓存的文件仍然存在)。
这样,CLI 和 FPM 共享文件缓存,FPM 将内存缓存作为第二个主缓存,以实现最高速度。PHP7 的重大改进!只需确保选择opcache.file_cache
CLI 和 FPM 都可以写入的目录,并且同一用户执行写入/读取。
2017 年更新
我不建议再将文件缓存与 FPM 一起使用(仅用于 CLI),因为在设置时无法重置缓存opcache.validate_timestamps=0
- 文件缓存会阻止 PHP-FPM 识别任何更改,因为opcache_reset()
甚至是完整的 PHP -FPM 重新启动不会影响文件缓存,并且文件缓存没有等效项,因此永远不会注意到更改的脚本。我在 2016 年 3 月将此报告为“错误”/“功能请求”,但目前这不被视为问题。请注意,如果您使用opcache.validate_timestamps=0
!
丢开。它主要用于调试 OPcache 本身的问题。
opcache.enable_cli
从命令行(使用命令)运行 PHP 脚本时,该选项启用 PHP OPcache php
。但是,请记住,对于 PHP 5.x,OPcache 扩展通过将缓存的操作码存储在当前进程的内存中来工作。这仅在运行 PHP 的进程将处理多个可以重用这些操作码的请求时有用,例如在 Web 服务器中或在 FastCGI 下。对于像 PHP CLI 这样运行一个“请求”并退出的进程,它只会浪费内存和时间。
根据PHP 文档:
opcache.enable_cli boolean
为 PHP 的 CLI 版本启用操作码缓存。这对于测试和调试非常有用。
因此,除非你真的需要它,否则它应该被禁用。
当您从命令行运行一些长期迁移过程时,这可能很有用(我个人已经通过运行一些广泛的迁移脚本为 CLI 测试了 OPcache v7.0.3,但我没有看到太多的性能改进)。