首页 > 解决方案 > OPCache 处理多个 apache

问题描述

在我的应用程序中,我使用多个具有负载平衡的 Apache。我假装开始使用 OPCache 来opcache.validate_timestamps = off提高性能,但我的怀疑/担忧是关于缓存重置。当我更改文件时,是否有必要在每个 Apache 中重置 OPCache?

标签: phpapacheopcache

解决方案


当您重新启动 PHP 模块/守护程序时(例如,为 mod_php 重新启动 Apache 或重新启动 PHP-FPM 等),OPCache 会被清除。

您可以通过从 php 脚本调用手动重置 opcache opcache_reset(),但是,这需要在 Apache/PHP-FPM 中执行;您不能从命令行执行此操作。一种方法是配置一个只能从服务器本身或受信任的静态 IP(例如<directory "dir">Require local</directory>)访问的受限目录,并将 php 文件放在那里——或使用类似的文件限制——然后使用来自服务器或 curl 通过 ssh/cmd(无头)调用脚本来重置缓存而不重新启动。

或者 PHP 提供了 command 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

较早的博客文章描述了一些潜在问题,不能保证它仍然准确。


推荐阅读