在我的应用程序中,我使用多个具有负载平衡的Apache。我假装开始使用带有opcache.validate_timestamps = off
的OPCache来提高性能,但是我的疑问/担忧是有关缓存重置的。当我更改文件时,是否需要在每个Apache中重置OPCache?
答案 0 :(得分:0)
当您重新启动PHP模块/守护程序(例如,重新启动Apache以获取mod_php或重新启动PHP-FPM等)时,OPCache被清除。
您可以通过从php脚本调用opcache_reset()
来手动重置操作缓存,但是,这需要在Apache / PHP-FPM中执行;您无法从命令行执行此操作。一种方法是配置只能从服务器本身或受信任的静态IP(例如<directory "dir">Require local</directory>
)访问的受限目录,并将php文件放置在此处-或使用类似的文件限制-然后使用服务器上的浏览器或通过ssh / cmd(无头)卷曲来调用脚本以重置缓存,而无需重新启动。
或者,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.