Zend OPCache - opcache.enable_cli 1 还是 0?它有什么作用?

2022-08-30 13:19:26

在文档中,它说“主要用于调试”,这会导致我认为“除非你有问题并且需要做一些调试,否则永远不要启用它”,但是阅读我能找到的关于它的大部分内容都说启用它“opcache.enable_cli 1”,但为什么?我找不到有关此事的任何信息,所以如果有人知道,如果文档基本上说要将其保持在0上,我为什么要启用它?


答案 1

借助 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 并将文件缓存用作回退(这也使 FPM 更快,因为文件缓存在重新启动 FPM 或重置 opcache 时减少了预热时间,因为缓存的文件仍然存在)。opcache.file_cache_only=0

这样,CLI 和 FPM 共享文件缓存,FPM 将内存中缓存作为第二个主缓存,以实现最大速度。PHP7 的一大改进!只需确保为 CLI 和 FPM 都可以写入的目录选择一个目录,并且同一用户执行写入/读取操作即可。opcache.file_cache

2017年更新

我不建议再将文件缓存与FPM一起使用(仅用于CLI),因为在设置时无法重置缓存 - 文件缓存阻止PHP-FPM识别任何更改,因为甚至完整的PHP-FPM重新启动都不会影响文件缓存,并且没有等效的文件缓存, 所以更改的脚本永远不会被注意到。我在 2016 年 3 月将此报告为“错误”/“功能请求”,但目前尚未将其视为问题。如果您使用,请当心!opcache.validate_timestamps=0opcache_reset()opcache.validate_timestamps=0


答案 2

把它关掉。它主要用于调试OPcache本身的问题。

该选项在从命令行运行 PHP 脚本时启用 PHP OPcache(使用命令)。但是,请记住,对于 PHP 5.x,OPcache 扩展的工作原理是将缓存的操作码存储在当前进程的内存中。仅当运行PHP的进程将处理可以重用这些操作码的多个请求时,这才有用,例如在Web服务器中或在FastCGI下。对于像 PHP CLI 这样的进程,它运行一个“请求”并退出,它只会浪费内存和时间。opcache.enable_cliphp


推荐