升级到PHP 5.4.0后调用未定义的方法从2012年3月开始提到一些APC错误报告.
我的具体问题是:PHP 5.4.4(或其附近)是否与APC 3.1.10(4月发布,但列为"beta"而不是"稳定")一起稳定?
我们在Apache盒子上看到5 000 - 9 000个APC文件缓存命中/秒,作为流量水平的模糊指标.这与PHP 5.3.8和APC 3.1.9(使用mod_php)一起工作正常 - 有没有人有5.4.4和3.1.10的可比流量的经验?
PHP 5.5默认包含zend opcache,这基本上意味着几乎没有人会使用APC.
但是使用什么而不是APC的用户数据缓存部分(apc_store&apc_fetch&similar)?
我真正喜欢使用APC用户数据缓存的一个用例是静态资产(javascript,css ..)的"版本".每当我引用静态文件时,我都会将其内容的哈希值添加到url中(例如<script src =/script.js>将成为<script src =/script.js?v = hash>),以便浏览器始终使用当前版本并可以永久缓存它.
我可以想象使用redis或memcache来存储静态文件的哈希值,但是通过网络或套接字询问另一个进程只是获取文件内容的哈希值似乎很愚蠢.APC用户数据缓存(在共享内存中并访问它几乎与访问php变量一样快)似乎是用于此类数据的正确选择.
所以问题是:在PHP 5.5中使用什么来缓存小块数据而不是APC?
我有一个m3.xlargeEC2实例,我PHP 5.5.11今天更新了.
有了这个更新,它覆盖php55-pecl-apc了php55-pecl-apcu.
在阅读和实验之后,我的理解是APC已被替换OPCache,除了可以带回来的关键值存储APCu.
在将我的配置调整到看起来合理的东西之后,在登录时使用Wordpress现在非常慢,至少300-900ms更糟糕(前端通过清漆缓存,并且工作完美...但是当你使用管理员时故意不是缓存,而是作为罪恶缓慢).
我升级时做了一系列基准测试,每个步骤的样本量很小.随着我的继续,它的恶化程度越来越差.
-->-->现在我只是闲着OPCache,没有APCu.
对于我的设置我使用最新的wordpress,一些大插件,但我不能把它们取下,因为它们很重要.幸运的是,清漆可以完成大部分工作.我的网站根目录有4个内核,16GB内存,~10k文件.我也没有真正的硬核应用程序或除了wordpress之外的任何东西,它是一个相当普通的设置.我认为这是可能有用的东西.
配置:
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=0
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.max_wasted_percentage=5
opcache.use_cwd=1
opcache.validate_timestamps=1
opcache.revalidate_freq=0
opcache.revalidate_path=0
opcache.save_comments=0
opcache.load_comments=0
opcache.fast_shutdown=1
opcache.enable_file_override=0
opcache.optimization_level=0xffffffff
opcache.inherited_hack=1
opcache.dups_fix=0
opcache.blacklist_filename=/etc/php-5.5.d/opcache*.blacklist
opcache.max_file_size=2M
opcache.consistency_checks=1
opcache.force_restart_timeout=180
opcache.error_log=/var/log/php-fpm/5.5/opcache.log
opcache.log_verbosity_level=1
opcache.preferred_memory_model=
opcache.protect_memory=0
Run Code Online (Sandbox Code Playgroud) 我想使用PHP 7.但似乎没有键值内存缓存的选项.
PHP 7有可用的替代方案吗?
或者有没有办法使用PHP7的Opcache来实现键值内存缓存?
我正在使用启用了APC缓存的PHP:
apc.cache_by_default => On
apc.enabled => On
apc.ttl => 7200
Run Code Online (Sandbox Code Playgroud)
现在我怎么知道它是否100%使用操作码缓存.
例如,让我们说我有这个PHP文件:
<?php
echo "Hi there";
?>
Run Code Online (Sandbox Code Playgroud)
现在运行此文件后,让我们将其更改为 echo "Bye there";
不应该回应"你好",因为7200秒的TTL尚未结束?我对吗?如果是这样,为什么它会回应"再见"?如果我错了,即使更改文件后如何强制它使用操作码缓存?
我在尝试使用时收到此错误apc_store().我google了它,发现这是APC timebomb bug,并看到一些修复建议添加apc.slam_defense = Off;到php.ini.
我需要知道是否由于编程错误而发生这种情况,如果是,则如何修复它.
这是代码段:
if ($data = apc_fetch("foo")) {
$an_array = $data;
} else {
/* couple of lines */
apc_store("circles", $an_array); // This is where I get the error
}
Run Code Online (Sandbox Code Playgroud)
将在我部署的系统中频繁调用此脚本.
我希望我提供了足够的信息
提前致谢
我以前认为缓存非常难以安装所以我从来没有这样做过......在阅读了APC之后,它似乎很容易安装.我一直以为我必须修改我的应用程序中的许多PHP代码才能使用它lol.
无论如何,我想安装APC.我可以使用phpinfo()并注意它没有在页面上列出,所以它没有安装.这是否也显示在那里的各种其他缓存系统?如果我已经安装了另一个缓存系统,我不想安装APC,因为我不确定它是否会导致冲突.主机会自动为您安装这些吗?
检查是否启用了任何类型的缓存的步骤是什么?
我有以下代码,信号量不会按预期锁定它.
(我知道apc_inc.这不是我想要的.)
$semkey = sem_get(123);
sem_acquire($semkey);
$count = apc_fetch('count111');
if(!$count) $count = 0;
$count++;
apc_store('count111', $count);
sem_release($semkey);
Run Code Online (Sandbox Code Playgroud)
其次是
ab -n 4000 -c 200 http://localhost/test.php
0请求失败.
但之后apc_fetch('count111')只显示了~1200次点击
nginx on ubuntu 12.04(64bit),php 5.3.16~dotdeb,php-fpm
我不时收到这条奇怪的警告信息.它通常在页面重新加载时消失.那是什么意思.我用Google搜索但无济于事.
Warning: include(): GC cache entry '/.../...class.php' (dev=2049 ino=37120489) was on gc-list for 3840 seconds in /.../...class.php on line 111
Run Code Online (Sandbox Code Playgroud)