2012-04-13 92 views
1

我们得到了一台装有Magento 1.4.2 CE的服务器,安装了APC 3.1.9并将Magento配置为将其用作后端缓存。Magento 1.4.2 + APC:清除缓存对更改设置没有影响

我们经历了一个奇怪的行为与缓存。直到apache2重新启动/ APC操作码高速缓存已被清除,才会显示我们在后端进行的每次更改。这包括例如更改欢迎消息或激活/停用Google Analytics。

问题:为什么APC缓存整页?我们不希望这种行为,它似乎不是标准的。对于后端的每一个小改动,我们都需要清除操作码缓存。清除Magento缓存没有帮助。

为了完整起见,这里是我们/etc/php5/conf.d/apc.ini

extension=/usr/lib/php5/20090626/apc.so 
apc.enabled=1 
apc.file_update_protection=2 
apc.optimization=0 
apc.shm_size=128M 
apc.include_once_override=0 
apc.shm_segments=1 
apc.gc_ttl=7200 
apc.ttl=7200 
apc.num_files_hint=1024 
apc.enable_cli=0 

启用/禁用谷歌Analytics(分析)也将有7200 TTL后没有效果。也许是因为我们的缓存目前没有运行完整。其容量的40%被使用,命中率约为98%。

这是apc.php输出完整的设置:

apc.cache_by_default 1 
apc.canonicalize  1 
apc.coredump_unmap  0 
apc.enable_cli  0 
apc.enabled   1 
apc.file_md5  0 
apc.file_update_protection 2 
apc.filters 
apc.gc_ttl   7200 
apc.include_once_override 0 
apc.lazy_classes  0 
apc.lazy_functions  0 
apc.max_file_size  1M 
apc.mmap_file_mask 
apc.num_files_hint  1024 
apc.preload_path  
apc.report_autofilter 0 
apc.rfc1867   0 
apc.rfc1867_freq  0 
apc.rfc1867_name  APC_UPLOAD_PROGRESS 
apc.rfc1867_prefix  upload_ 
apc.rfc1867_ttl  3600 
apc.serializer  default 
apc.shm_segments  1 
apc.shm_size  128M 
apc.slam_defense  1 
apc.stat   1 
apc.stat_ctime  0 
apc.ttl   7200 
apc.use_request_time 1 
apc.user_entries_hint 4096 
apc.user_ttl  0 
apc.write_lock  1 
+0

我得到了禁用Magento后端缓存的提示,因为它比APC操作码缓存本身对性能的影响更小。 取消激活local.xml中的缓存并清除var/cache确实有帮助。这些商店几乎和以前一样快,但每当我改变一个设置时,我必须清除操作码缓存的错误消失了。 – SebiF 2012-04-13 14:59:57

回答

1

APC一直都在终端和基于web缓存。由于您只能从基于Web的URL调用而不是命令行清除“Web”缓存命中,因此重新启动Apache后将清除APC基于Web的缓存。您很可能需要设置一个脚本来用类似的脚本清除缓存,因此您只需从CLI或脚本中调用它即可。

echo "Clearing APC web cache\n"; 
system('wget --spider --quiet http://localhost/clear_apc_cache.php'); 

echo "Clearing APC command line user cache\n"; 
apc_clear_cache('user'); 

echo "Clearing APC command line opcode cache\n"; 
apc_clear_cache(); 

显然,你就需要使用相同的两个APC内部方法创建clear_apc_cache.php相应的文件中调用,apc_clear_cache();apc_clear_cache('user');

而且,我会设置一个局域网,查看APC缓存还有:

http://www.electrictoolbox.com/apc-php-cache-information/

+0

好吧,这不是关于修复Magento怪异的行为,但是不必每次都不必重新启动web服务器。所以这被接受。顺便说一句。我们已经运行了缓存信息,请参阅文本中对apc.php的引用。 – SebiF 2012-04-16 07:31:55

0

您还可以设置apc.stat为零。 (apc.stat = 0)在你的PHP.ini文件中。

如果它设置为1,它不会查找文件更新,这会提供更好的性能,但需要在更新后重新启动apache。设置为0它将检查文件更新并将它们添加到缓存中(即,您的更新将在网站上可见)。

+1

我很遗憾地告诉你,这是错误的。它完全相反。 apc.stat = 1将让APC检查已更改的文件,而apc.stat = 0将禁用对已更改文件的检查。在问题的配置中选择的设置是可以的。参见[php手册](http://www.php.net/manual/de/apc.configuration.php#ini.apc.stat) – SebiF 2012-07-05 18:34:21