标签: opcache

OPcache max_accelerated_files 实际上是如何工作的?

也许这是一个愚蠢的问题,但我试图弄清楚 max_accelerated_files 实际是如何工作的......

我理解 PHP net 的“描述/说明”

opcache.max_accelerated_files 整数 OPcache 哈希表中键(以及脚本)的最大数量。使用的实际值将是素数集合 { 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987 } 中大于或等于配置值的第一个数字。最小值为 200。 PHP < 5.5.6 中最大值为 100000,更高版本中为 1000000。

但我的问题是配置后它会如何处理这个数字。它是否为此设置分配内存?如果我们有足够的内存,为什么我们不直接设置数字 1000000 就这样呢?如果我们将此数字配置为 2000 并且我们有 2010 个文件,会发生什么情况?它们是否对堆栈进行某种排序,一旦该文件发生变化,它就会被缓存?未缓存的文件会发生什么情况?

谢谢您的回答

php opcache

7
推荐指数
1
解决办法
3183
查看次数

Opcache - 在PHP5.4及更低版本中清理缓存

没有办法使用 PHP5.4或更低版本的Opcache清理/重置缓存文件
这里opcache_reset()它只是似乎与PHP5.5的工作职能

解决方法是重新启动...

编辑:我在Github上打开了一个问题

php zend-optimizer php-5.4 opcache

6
推荐指数
1
解决办法
1万
查看次数

仅在git push之后才重新验证opcache

我正在将PHP与OPcache一起使用。我只是git-push掌握将我的网站部署到生产环境中(不是真的,它只是在单元测试之后,但是没关系)。在php.ini文件中,OPcache设置与“时间”和“频率”有关。但是我只想在git pull我的服务器后重置缓存。

所以我想我只需要opcache_reset在生产服务器上进行git-pull之后调用并将其设置opcache.validate_timestamps0(从不重置缓存)

我没有阅读过有关该方法的任何内容,因此我对此表示怀疑:我不知道这是否是一个好习惯。我错过了什么?有没有风险或可以吗?

非常感谢!

PS:我使用的是PHP框架和作曲器(composer install在git-pull之后运行)

php git optimization composer-php opcache

6
推荐指数
1
解决办法
356
查看次数

Opcache清除太快

我已经在一个新托管(虚拟云)上设置了我的网站,但是我正在查看opcache并且从缓存中删除了scripts不用于说a minutes or so的.

有没有办法阻止它?或者这是正常行为?

非常感谢.

php opcache

6
推荐指数
1
解决办法
181
查看次数

Zend Opcache不缓存所有文件(CentOS 6.7 + Nginx 1.8.1 + PHP 7 + Laravel 5.1)

因此,我们希望尽快发布基于Laravel 5.1的项目,但我们注意到性能不佳,并且我们正在尝试优化服务器设置.

正如标题中所列,我们将在CentOS 6.7服务器上部署它,使用Nginx 1.8.1和PHP 7以及PHP-FPM.由于CentOS 6.7的存储库不提供PHP 7,我们正在使用IUS的替换软件包.

我们注意到可能导致性能不佳的事情之一是Zend Opcache尽管已经启用并且正在工作(我们的命中率很高),但似乎并没有缓存我们项目中的所有文件.我们使用opcache-gui来帮助可视化缓存的内容,虽然项目的许多文件都在那里(包括来自第三方库的文件),但大多数文件都丢失了,包括我们的主控制器和许多支持类.实际上,当我们禁用Opcache时,响应时间几乎保持不变.opcache黑名单目前是空的,所以这不是他们没有被包括在内的原因.

我们试图使用opcache_compile_file()强制缓存丢失的文件,虽然文件确实被编译和缓存,但它们永远不会得到任何命中.

据我所知,Opcache会缓存所有正在执行的文件,但这似乎不是这里发生的事情.我查看了opcache设置,但除了黑名单之外,找不到会明显影响这种行为的设置.

还有什么我想念的吗?在决定缓存内容时PHP会依赖的任何其他标准?

任何有关此事的帮助将不胜感激!

php centos nginx opcache

6
推荐指数
1
解决办法
383
查看次数

在 PHP8 和 JIT 中选择最佳的 `opcache.jit_buffer_size` 值

我一直在寻找一些关于 的最佳值的指南opcache.jit_buffer_size。建议的值最多为 256M(例如https://php.watch/versions/8.0/JIT#jit-opcache.jit_buffer_size)甚至 500M(https://medium.com/@edouard.courty/make-your- php-8-apps-twice-as-fast-opcache-jit-8d3542276595)。但(在我看来)他们似乎只是任意选择的。

但是,我找不到关于如何选择该值的太多解释。“深入 JIT”一文 ( https://php.watch/articles/jit-in-depth#jit-ideal ) 提供了一些线索。

RFC https://wiki.php.net/rfc/jit也没有帮助。

我想答案是:在您的环境中进行一些基准测试并选择最佳的缓冲区大小。

有人对这个话题有一些想法吗?或者也许知道一个好的参考资料?

php optimization jit opcache php-8

6
推荐指数
0
解决办法
2104
查看次数

PHP 5.5 OPCache无法处理apache

我负责我公司的操作码缓存交换,我们正在从eaccelerator转移到PHP 5.5附带的Zend OPCache.

当我在CLI中访问PHP时,似乎OPCache工作正常:

PHP 5.5.5 (cli) (built: Oct 15 2013 10:29:13)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2013 Zend Technologies
    with Zend OPcache v7.0.3-dev, Copyright (c) 1999-2013, by Zend Technologies
Run Code Online (Sandbox Code Playgroud)

但是当我通过Apache访问我的网站时,与没有使用操作码缓存的相同页面相比,基准测试没有显示出任何改进.此外,get_loaded_extensions(true)返回一个空数组.

任何人都可以回答我为什么它在地球上不起作用?

我正在使用Windows 7,来自Apache Lounge的Apache 2.4.6,来自windows.php.net的PHP 5.5.5.


编辑:

根据要求,我的OPCache配置:

[opcache]
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
;opcache.max_wasted_percentage=5
;opcache.use_cwd=1
;opcache.validate_timestamps=1
opcache.revalidate_freq=60
;opcache.revalidate_path=0
;opcache.save_comments=1
;opcache.load_comments=1
opcache.fast_shutdown=1
;opcache.enable_file_override=0
;opcache.optimization_level=0xffffffff
;opcache.inherited_hack=1
;opcache.dups_fix=0
;opcache.blacklist_filename=
;opcache.max_file_size=0
;opcache.consistency_checks=0
;opcache.force_restart_timeout=180
;opcache.error_log=
;opcache.log_verbosity_level=1
;opcache.preferred_memory_model=
;opcache.protect_memory=0
Run Code Online (Sandbox Code Playgroud)

php apache opcache

5
推荐指数
2
解决办法
7699
查看次数

如何在 MAC Sierra (MAMP) 上为 PHP7.1 启用 OPCache

我已经从GitHub安装了 OPCache GUI并安装在我的 Mac 中。但是当我运行页面时,它显示

Zend OPcache 扩展已安装但未打开

我已经使用这些在我的 php.ini 文件中启用了 OPCache

opcache.enable=1
opcache.enable_cli=1
zend_extension=opcache.so
opcache.memory_consumption=128
opcache.max_accelerated_files=2500
opcache.interned_strings_buffer=8
opcache.revalidate_freq=60
opcache.fast_shutdown=1
zend_extension=/path/to /文件

请帮忙!

php macos opcache

5
推荐指数
1
解决办法
6066
查看次数

我们在我们的服务器上看到“损坏的”opcache。知道如何解决吗?

我们发现了一个我一直在努力解决的奇怪问题。

我们时不时地对服务器进行部署,一台服务器将开始将错误流式传输到日志中,如下所示:

require_once(): Failed opening required '/var/www/CrrrectPath/Abstract.php' 
(include_path='/var/www/') in /var/www/CorrectPath/Object.php on line 2
Run Code Online (Sandbox Code Playgroud)

问题并不总是include(). 有时,方法名称会以同样的方式被损坏(单个字符被替换为另一个字符)。

在生产中调试受影响的服务器后,我可以看到文件本身绝对没问题。我的直觉是文件的 opcache 在某种程度上被损坏了。

我们启用了“validate_timestamps”,所以我认为这些文件在中间重新读取是合理的rsync(作为部署的一部分,我们从一个文件夹同步到“live”文件夹)。然后,我们禁用“validate_timestamps”,现在正在执行opcache_reset()代码完全同步的操作。该问题发生的频率确实较低,但我们仍然会看到这种情况的发生。

还有其他人遇到过这个问题吗?对于解决方案有什么建议(除了完全改变我们的部署方式之外)?

有关信息,

$ php -v
PHP 7.0.21-1~ubuntu14.04.1+deb.sury.org+1 (cli) (built: Jul  6 2017 09:38:10) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.0.21-1~ubuntu14.04.1+deb.sury.org+1, Copyright (c) 1999-2017, by Zend Technologies
Run Code Online (Sandbox Code Playgroud)

谢谢

php opcache

5
推荐指数
1
解决办法
786
查看次数

在符号链接部署中启用 Opcache 文件缓存时,是什么导致了段错误?

我正在使用 PHP 部署程序,它是一个基于符号链接的部署工具,opcache:reset在部署后调用。

最近,我在部署后的 PHP-FPM 进程中遇到了段错误。

这表现为 PHP 日志中的段错误/内存耗尽警告正在输出或来自 Apache 的 500/503 错误。

多年来这一直运作良好,所以我很困惑到底是什么导致了这种情况的发生。

在第一个段错误之后,我可以在受影响池的每个页面刷新上重现此情况。

如果我重新启动 PHP-FPM 进程,第一次会正确提供页面,然后出现段错误。

我怀疑这与 Opcache 有关,因为如果我删除 Opcache 缓存文件并重新启动 PHP-FPM,问题就会消失。如果我禁用opcache.file_cache,那么就没有问题了。请注意,我并不专门使用文件缓存。

当我(不科学地)检查 PHP 在内存耗尽错误期间报告的文件的 opcache 版本时,我注意到它们似乎被截断或丢失了未发生段错误的 opcache 文件的先前版本中存在的数据。当我删除那些特定的 opcache 文件并重新启动 PHP-FPM 时,问题就消失了。因此,我认为 opcache 文件在部署之间似乎已损坏。

环境:

  • CentOS 7.9.2009
  • PHP 7.4.15
  • 每个池都配置为在其自己的用户下运行
  • Opcache 文件存储在 /var/www/vhosts/[project]/opcache 中
  • SELinux 已启用

我的 opcache 配置:

zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=0
opcache.memory_consumption=96
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=4096
opcache.max_wasted_percentage=5
opcache.validate_timestamps=1
opcache.revalidate_path=0
opcache.revalidate_freq=2
opcache.max_file_size=0
Run Code Online (Sandbox Code Playgroud)

核心转储:

GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-120.el7
Copyright (C) 2013 Free …
Run Code Online (Sandbox Code Playgroud)

php opcache php-deployer fpm

5
推荐指数
1
解决办法
2137
查看次数