APC和PHP - 由于缓存混合导致的站点损​​坏

时间:2011-04-17 05:21:10

标签: php apc virtualhost opcode

我希望有人可以帮我解决这个问题。我最近在我的一些服务器上运行APC,这些服务器只托管一个应用程序,并且它运行良好。不幸的是,我今晚在我的主力网络服务器上运行它,一旦我打开它,我开始从我的wordpress博客“混合”。第一个加载的博客会缓存数据库信息,然后加载的每个博客都会出现数据库错误。

我想知道的是,是否有某种方法以某种方式前缀缓存,以便我可以避免这个问题。我假设缓存会尊重文件之间绝对路径的差异,而不是在多个站点上使用相同的缓存副本...... FAIL

提前致谢!

更新

这里要求的是我在/etc/php.d/中使用的apc.ini文件的副本,以覆盖默认设置:

/etc/php.d/apc.ini

extension=apc.so
apc.shm_size                    = 64M
apc.max_file_size               = 8M
apc.include_once_override       = 1
apc.stat_ctime                  = 1

7 个答案:

答案 0 :(得分:6)

据我所知,您无法使用全局设置为不同的应用程序设置前缀。您可以更改密钥名称并为其名称添加前缀。如果你更熟练,你可以使用fastcgi使用两个不同的php实例,具体取决于你使用的http服务器。我们正在使用APC和ngix做类似的事情:)

答案 1 :(得分:4)

您是否尝试将apc.file_md5设为On?其他可能有所作为的指令:

根据您的目标,我相信apc.file_md5apc.canonicalize会有所帮助。

答案 2 :(得分:2)

wordpress是否添加了缓存条目以保存数据库请求?如果是这样,您将需要编辑缓存库文件以包含前缀。

我猜你正在使用wordpress插件?如果是这样哪个插件?

答案 3 :(得分:2)

如果您正在使用Doctrine ORM并启用了APC缓存而未指定前缀,则可能会导致问题。

就我而言,使用Symfony框架并盲目地遵循http://symfony-check.org/指南导致APC缓存混合。

感谢Apostrope Now https://groups.google.com/d/msg/apostrophenow/1Z79wc4wjQk/6Vi2jLjP-twJ中的人员,您似乎需要为Doctrine缓存指定一个唯一的前缀。

/config/ProjectConfiguration.class.php

public function configureDoctrine(Doctrine_Manager $manager)
{
  $manager->setAttribute(Doctrine::ATTR_QUERY_CACHE, new Doctrine_Cache_Apc(array('prefix' => 'something_unique'));
}

答案 4 :(得分:1)

您是否已尝试过内存映射?它似乎(我将尝试它!)它应该工作正常,使用php-fpm和池,它允许你有不同的帐户与不同的缓存......!
以下是您可能感兴趣的链接:http://ravirajsblog.blogspot.it/2012/02/php-apc-locking-mechanism.html:)

答案 5 :(得分:0)

我有模块,它可以帮助你:http://github.com/jamm/memory
在那里你可以使用前缀,钥匙标签和其他好处 您可以在不更改代码的情况下更改缓存存储(APC,内存缓存,shm内存)(所有存储都有一个界面)。

编辑:这是用户的缓存,因此无法解决您的问题。你提到它很晚了:)

答案 6 :(得分:0)

我只需处理这个问题..我添加了以下apc params

apc.file_md5 = 1
apc.canonicalize = 0 

不确定是否有帮助或我添加到文件中的变量。然而,在我的情况下,它混​​合了一个Web根目录下的文件,它恰好存在于不同的路径中,具有相同的名称和相同的“标题”。

相关问题