问题标签 [opcache]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1080 浏览

php - 文件大小更改较小时 OPcache 不更新

在我的开发中,如果更改很小,则 VM OPcache 不会使文件的缓存无效。似乎没有考虑更改之间的时间量。我经常需要添加一堆虚假评论(约 80 个字符)才能让 OPcache 引起注意。禁用 OPcache 后,问题就消失了。

我真的很想在我的开发 VM 上启用 OPcache,因为它可以加快速度并让我与生产保持一致。我能做些什么来确保 OPcache 在很少的字符更改后使文件无效?

PHP 5.5.14
阿帕奇 2.4.9
Ubuntu 14.04

OPcache 设置:

0 投票
1 回答
1788 浏览

capistrano - 运行 Opcache 时部署新的 PHP 代码

我们正在尝试在运行 Opcache 时通过 Capistrano 部署新的 PHP 代码。

Capistrano 每次部署时都会创建一个新的部署目录,然后调整符号链接,以便网络服务器指向新目录。因为 Opcache 通过文件的真实路径进行缓存,这意味着新部署的站点版本与旧版本完全分开缓存。

我们遇到的问题是 Opcache 耗尽了内存,因为每次新部署都会导致整个代码库被缓存,而旧代码永远不会被驱逐。我们可以调用opcache_reset(),但是当缓存被重置时,当缓存踩踏时我们会短暂地得到 500 错误。(如果我们尝试在不预热缓存的情况下启动新部署,也会出现同样的错误。)

有没有更好的方法来处理这个?有什么方法可以启动新代码而不填满 opcache,直到它耗尽内存(或者因为它有太多文件而清空自己),这样我们就可以避免调用opcache_reset()实时站点?我们正在使用(或尝试过渡到)Nginx 作为我们的 Web 服务器,使用 PHP-FPM 处理 PHP 请求。

0 投票
0 回答
1527 浏览

caching - OpCache Zend 理解flush/restart

我正在使用 OpCache Zend 我从 APC 切换。我一直理解为什么 OPCache 在上升到最终级别时会刷新内存。在逻辑内存应该被填满并且 OpCache 应该保持它直到 Oom 重启或 Hash 重启发生。正确的 ?

我有大约 65 个域(Wordpresses、Joomla、Magento、Pure PHP)

我的服务器规格是:
Intel Xeon X3440 四核
内存 16GB
x2 1500 GB SATA II-HDD 7.200 rpm
CentOS 5 - Plesk 10 - RAID 1

我对 Zend OPcache 的配置是:

在此处输入图像描述

目前我有 7963 个最大加速文件,但我尝试了更多。奇怪的是,如果发生刷新,则没有关于任何 OPCache 重启的信息。

0 投票
1 回答
649 浏览

php - 仅在 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 之后运行)

0 投票
1 回答
3631 浏览

php - Symfony2:使用 OpCache 缓存“类加载器”

PHP具有一个名为OPCache的新代码缓存模块。Symfony2建议使用 ApcClassLoader(基于APC)或XcacheClassLoader(基于XCache)缓存从类到其包含文件的映射。我的服务器(带有 PHP 5.6 的 Apache 2.4)使用OpCache.

  1. 是否有替代的“缓存映射” OpCache?我还没有发现。
  2. 我可以一起使用APCOpCache(我可以使用ApcClassLoader)?我想不是。
0 投票
2 回答
2263 浏览

php - 启用 PHP 5.5 OPCache

将 OPCache 配置为 recomanded后,它不起作用。

那么,如何调试 OPCache 看看问题出在哪里呢?

或者我错过了什么?

我的配置:

php.ini 在此处输入图像描述

php -v 在此处输入图像描述

在此处输入图像描述

在代码中

0 投票
0 回答
1040 浏览

php - Yii 1.1.12:如何配置 OpCache:我将 PHP 从 5.3 升级到 5.5

我正在使用 Yii 1.1.12,最近将我的 PHP 从 5.3 升级到 5.5,发现不再使用 APC,因为 OpCache 已成为 PHP5.5 的一部分。在我的 Yii main.config 文件中,我有以下条目:

两个问题:

  1. 我找不到我应该将上述条目更改为什么以便 Yii 将其作为缓存?我在我的代码中广泛使用以下内容

Yii::app()->cache->set('要缓存的一些数据', $CACHE_VARIABLES); $get_var=Yii::app()->cache->get($CACHE_VARIABLES);

  1. 我是在正确的轨道上还是错过了其他东西?

PhpInfo 的输出显示了以下 Zend Opcache 变量(每个变量前面都提到了本地和主值:

Zend OPcache

谢谢。

0 投票
1 回答
816 浏览

php - PHP 5.5.5 可以从 OPcache 加载 Phar 文件吗?

使用的 PHP 版本是 5.5.5,我知道这个版本的 PHP 可以将预编译的脚本字节码存储在共享内存中,如下页所述:http: //php.net/manual/en/intro.opcache.php

我也知道 OPcache 可以编译以下页面中提到的文件:http: //php.net/manual/en/function.opcache-compile-file.php

如果这适用于 Phar 文件,那就太好了。但是,我无法判断 PHP 是否正在从共享内存中的字节码加载我的 Phar 文件。我无法使用 opcache_is_script_cached 函数进行测试,因为这在 PHP 5.5.5 中不可用,该函数仅在 PHP 5.6 和更新版本中可用。

有人可以澄清这是否有效,或者至少向我解释我如何找到答案?

0 投票
1 回答
49891 浏览

php - APC、APCu 和 Opcache 的区别?

我正在使用以下软件包运行 Web 服务器;php-apc 3.1.7-1 php5-fpm 5.3.10-1ubuntu3.10

但是,我在 Ubuntu 14.04 上构建了一个新服务器,似乎 php-apc 不再可用。

因此,APC 是我巨大流量的生命服务器(每天 10 万次独立访问)

我对 PHP 的缓存机制有点困惑。新服务器包括以下软件包: php-apc 4.0.2-2build1 php5-apcu 4.0.2-2build1 php5-fpm 5.5.9+dfsg-1ubuntu4.7

phpinfo() 给了我模拟的“apc”。据我了解,APC 已被 APCu 取代。

https://github.com/cepa/kickasscache 我正在为我的缓存运行这个免费类,在我的情况下它确实节省了很多 cpu/mem。但我不明白这是否与 APCu 相同?

如果不是,我该如何设置正确的缓存?因为我的新服务器资源有限,我需要一个解决方案。

php -v 返回

这是否意味着默认启用OPcache?

0 投票
1 回答
553 浏览

php - PHP 5.6 function_exists 与 OPCache 的奇怪行为

我偶然发现了 PHP 5.6 中 php 函数function_exists ( )的奇怪行为。问题是,如果我将函数名称参数直接作为字符串提供,结果与作为变量提供时不同。这是代码:

结果如下:

我希望,在这两种情况下它都应该是错误的。

当深入挖掘时,我发现它与OPCache 有关。当 OPCache 被禁用时,结果很好 - 两个调用都返回 false。但是启用 OPCache 后,在第一次运行时它仍然可以,但在第二次运行时(所以当缓存的结果被提供时),结果是错误的。

函数posix_getpwuid在 PHP 配置中的disable_functions中被禁用。当使用不存在的函数名进行测试时,结果是正确的。

在 PHP 5.5.21 中进行测试时,结果很好(有或没有 OPCache)。

在 PHP 5.5 和 5.6 中使用 Zend OPcache v7.0.4-dev。

我正在考虑向 PHP 开发人员提交一个错误,只是想确保我没有遗漏任何东西。

谢谢。

编辑:还使用新编译的 PHP 5.6.6 和 5.6.7 进行了测试。操作系统已全面更新 CentOS 6.6。5.6.6 或 5.6.7 的结果相同。

PHP 在没有任何构建选项的情况下构建:

用非常简单的 php.ini

测试脚本:

和结果 - 第一次运行和正确的结果:

第二次运行 - 由 OPCache 提供服务,结果很糟糕:

(现在我不知道为什么,但是当php只执行时,OPCache 没有启动,所以我使用了php-cgi