【问题标题】:APC and PHP - Broken Sites Due to Cache MixingAPC 和 PHP - 因缓存混合而损坏的站点
【发布时间】:2011-08-07 04:38:24
【问题描述】:

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

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

提前致谢!

更新

这里要求的是我在 /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

【问题讨论】:

  • 没用过APC,但是在memcached中可以设置前缀。我们通常设置一个干净的 url 作为前缀。我相信 APC 也有。
  • @JohnP: "你可以设置前缀" --- 嗯,怎么样?
  • @zerkms 抱歉,我忘了我们使用的是 Zend ^_^ 前缀是在包装器中设置的。 脚>
  • 啊,我的希望就在那里。好吧,我已经禁用了 APC,直到我弄明白为止。我在一个非常精简的服务器上运行它,因此操作码缓存将是一个巨大的好处,因为这些主要是静态站点和/或 wordpress 博客。任何帮助表示赞赏!
  • 重要提示:您看到的是 user 缓存条目还是 system 缓存条目的混合?如果混合了用户缓存条目,则需要修改用户代码以在所有调用前加上站点特定的标识符。如果您发现 system 缓存条目有问题,请确保 APC 没有填满。如果缓存已满,我会经常看到 APC 损坏问题。使用捆绑的apc.php 脚本检查利用率,如果您填充了缓存/片段,则增加您的 APC 内存限制。

标签: php apc virtualhost opcode


【解决方案1】:

我只需要处理这个问题。我添加了以下 apc 参数

apc.file_md5 = 1
apc.canonicalize = 0 

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      如果您使用 Doctrine ORM 并启用 APC 缓存而不指定前缀,这可能会导致问题。

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

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

      /config/ProjectConfiguration.class.php

      公共函数 configureDoctrine(Doctrine_Manager $manager)
      {
        $manager->setAttribute(Doctrine::ATTR_QUERY_CACHE, new Doctrine_Cache_Apc(array('prefix' => 'something_unique'));
      }
      

      【讨论】:

      • 谢谢,这方面的文档很差。
      • 多么细微的差别。谢谢你把它放在那里 - 让我头疼不已!
      【解决方案4】:

      我有模块,可以帮到你:http://github.com/jamm/memory
      在那里,您可以使用前缀、标签作为键和其他好处。
      您可以更改缓存存储(APC、memcache、shm-memory)而无需更改代码(所有存储的一个接口)。

      编辑:它用于用户的缓存,所以它不会解决您的问题。你提的晚了:)

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

          您是否尝试将apc.file_md5 设置为On?其他可能产生影响的指令:

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

          【讨论】:

          • 如果可以的话,我今晚会调查一下,看看它是否能解决我的问题。听起来很有希望,尤其是规范化和 MD5。谢谢!
          【解决方案7】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-12-26
            • 2016-05-26
            • 1970-01-01
            • 2018-09-26
            相关资源
            最近更新 更多