问题标签 [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.
php - 文件大小更改较小时 OPcache 不更新
在我的开发中,如果更改很小,则 VM OPcache 不会使文件的缓存无效。似乎没有考虑更改之间的时间量。我经常需要添加一堆虚假评论(约 80 个字符)才能让 OPcache 引起注意。禁用 OPcache 后,问题就消失了。
我真的很想在我的开发 VM 上启用 OPcache,因为它可以加快速度并让我与生产保持一致。我能做些什么来确保 OPcache 在很少的字符更改后使文件无效?
PHP 5.5.14
阿帕奇 2.4.9
Ubuntu 14.04
OPcache 设置:
capistrano - 运行 Opcache 时部署新的 PHP 代码
我们正在尝试在运行 Opcache 时通过 Capistrano 部署新的 PHP 代码。
Capistrano 每次部署时都会创建一个新的部署目录,然后调整符号链接,以便网络服务器指向新目录。因为 Opcache 通过文件的真实路径进行缓存,这意味着新部署的站点版本与旧版本完全分开缓存。
我们遇到的问题是 Opcache 耗尽了内存,因为每次新部署都会导致整个代码库被缓存,而旧代码永远不会被驱逐。我们可以调用opcache_reset()
,但是当缓存被重置时,当缓存踩踏时我们会短暂地得到 500 错误。(如果我们尝试在不预热缓存的情况下启动新部署,也会出现同样的错误。)
有没有更好的方法来处理这个?有什么方法可以启动新代码而不填满 opcache,直到它耗尽内存(或者因为它有太多文件而清空自己),这样我们就可以避免调用opcache_reset()
实时站点?我们正在使用(或尝试过渡到)Nginx 作为我们的 Web 服务器,使用 PHP-FPM 处理 PHP 请求。
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 重启的信息。
php - 仅在 git push 后重新验证 opcache
我将 PHP 与 OPcache 一起使用。我只 git-push 来掌握在生产中部署我的网站(不是真的,只是在单元测试之后,但没关系)。在php.ini
文件中,OPcache 设置是关于“时间”和“频率”的。但我只想在我的服务器上 git pull 后重置缓存。
所以我想我只需要opcache_reset
在我的生产服务器上调用 git-pull 并设置opcache.validate_timestamps
为0
(从不重置缓存)
我没有读过任何关于这种方式的信息,所以我怀疑:我不知道这是否是一个好习惯。我错过了什么?有风险还是可以?
非常感谢!
PS:我正在使用 PHP 框架和作曲家(composer install
在 git-pull 之后运行)
php - Symfony2:使用 OpCache 缓存“类加载器”
PHP
具有一个名为OPCache的新代码缓存模块。Symfony2建议使用 ApcClassLoader
(基于APC)或XcacheClassLoader
(基于XCache)缓存从类到其包含文件的映射。我的服务器(带有 PHP 5.6 的 Apache 2.4)使用OpCache
.
- 是否有替代的“缓存映射”
OpCache
?我还没有发现。 - 我可以一起使用
APC
和OpCache
(我可以使用ApcClassLoader)?我想不是。
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 文件中,我有以下条目:
两个问题:
- 我找不到我应该将上述条目更改为什么以便 Yii 将其作为缓存?我在我的代码中广泛使用以下内容
Yii::app()->cache->set('要缓存的一些数据', $CACHE_VARIABLES); $get_var=Yii::app()->cache->get($CACHE_VARIABLES);
- 我是在正确的轨道上还是错过了其他东西?
PhpInfo 的输出显示了以下 Zend Opcache 变量(每个变量前面都提到了本地和主值:
Zend OPcache
谢谢。
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 和更新版本中可用。
有人可以澄清这是否有效,或者至少向我解释我如何找到答案?
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?
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
)