【发布时间】:2019-10-04 23:54:25
【问题描述】:
在我的应用程序中,我使用多个具有负载平衡的 Apache。我假装开始使用带有opcache.validate_timestamps = off 的OPCache 来提高性能,但我的怀疑/担忧是关于缓存重置。当我更改文件时,是否需要在每个 Apache 中重置 OPCache?
【问题讨论】:
在我的应用程序中,我使用多个具有负载平衡的 Apache。我假装开始使用带有opcache.validate_timestamps = off 的OPCache 来提高性能,但我的怀疑/担忧是关于缓存重置。当我更改文件时,是否需要在每个 Apache 中重置 OPCache?
【问题讨论】:
当您重新启动 PHP 模块/守护程序时(例如,为 mod_php 重新启动 Apache 或重新启动 PHP-FPM 等)时,OPCache 会被清除。
您可以通过从 php 脚本调用 opcache_reset() 手动重置 opcache,但是,这需要在 Apache/PHP-FPM 中执行;您不能从命令行执行此操作。一种方法是配置一个只能从服务器本身或受信任的静态 IP(例如<directory "dir">Require local</directory>)访问的受限目录,并将 php 文件放在那里 - 或使用类似的文件限制 - 然后使用从服务器浏览器或 curl 通过 ssh/cmd (headless) 调用脚本来重置缓存而不重新启动。
另外,PHP 提供命令opcache_invalidate(),但这可能会导致问题(阅读有关 opcache 潜在问题的更多信息)。如果您的部署是脚本化的,则可能会使单个更改的文件无效。
validate_timestamps 不一定“天生”不好,但对于生产服务器(您很少推送更新并且可能已经重新启动 apache/php-fpm)它可能有点矫枉过正。
https://www.php.net/manual/en/function.opcache-reset.php
https://www.php.net/manual/en/function.opcache-invalidate.php
Older blog post that describes some of the potential issues, can't guarantee it is still accurate.
【讨论】: