【问题标题】:Problems with APC on publish发布时 APC 的问题
【发布时间】:2009-05-04 14:42:41
【问题描述】:

我们最近在我们的服务器上启用了APC,有时当我们发布新代码或更改时,我们会发现被更改的源文件开始抛出未反映在代码中的错误,通常会解析描述不存在的令牌。我们已经通过在错误日志说受到影响的文件上运行php -l 来验证这一点。通常重新发布可以解决问题。我们使用的是 PHP 5.2.0 和 APC 3.01.9。我的问题是,有没有其他人遇到过这个问题,或者有没有人认识到我们的问题是什么?如果是这样,您是如何解决的,或者我们该如何解决?

编辑:我可能应该添加一些关于我们发布过程的细节。内容通过 rsync 从登台服务器推送到生产服务器。我们启用了apc.stat_ctime,因为它说这有助于使用 rsync 使事情运行得更顺畅。 apc.write_lock 默认开启,我们没有禁用它。 apc.file_update_protection 同上。

【问题讨论】:

  • 什么是 APC(我能想到的所有 APC 在这种情况下都没有意义)?
  • Brian,它是一个加速 PHP 执行的操作码缓存。如果您想了解更多信息,我会在问题文本中添加指向它的链接。
  • 乱七八糟!在本地复制文件而不是 rsync 时也会发生这种情况吗?

标签: php apc


【解决方案1】:

听起来部分发布的文件正在被读取并缓存为损坏。 apc.file_update_protection 旨在帮助阻止这种情况。

在 php.ini 中:apc.file_update_protection integer

apc.file_update_protection 设置 延迟缓存全新的 文件。默认为 2 秒 意味着如果修改 文件上的时间戳 (mtime) 表明 不到 2 秒 被访问,它不会被缓存。 不幸的人访问 这个写了一半的文件仍然会看到 奇怪,但至少不会 坚持。

在编辑问题之后:我没有看到这类问题的一个原因是我推送了一个全新的网站副本(使用 SVN 导出)。只有在完全完成之后,它才会对 Apache/Mod_php 可见(请参阅我的回答 How to get started deploying PHP applications from a subversion repository?

当然,可能发生的另一件事是,如果您正在就地更新,您可能正在更新依赖于尚未上传的其他文件的文件。 Rsync 只能保证单个文件的原子更新,而不是正在更改/上传的整个集合。另一个原因是我想把网站全部上传,然后才投入使用。

【讨论】:

    【解决方案2】:

    听起来 APC 没有执行或获取正确的文件统计信息。您可以检查它以确保 APC 配置 apc.stat 设置正确。你可以做的另一件事是在发布新代码时强制使用apc_clear_cache() 清除缓存。

    【讨论】:

      【解决方案3】:

      以前从未见过,即使我是 APC 的忠实用户。 每次在服务器上发送新代码时,也许尝试触发一个清空 APC 操作码的脚本?

      【讨论】:

        【解决方案4】:

        当你得到一个有解析错误的文件时,备份它,然后重新发布。获取现在可以工作的同一个文件,并对出现解析错误的文件进行比较。

        【讨论】:

          【解决方案5】:

          ctime 表示创建时间。每次进行更新时,您都需要手动刷新整个缓存。

          您可以轻松地做到这一点,只需将 apc.php 脚本放在服务器上的某个位置即可。此脚本为您提供缓存统计信息,并允许您完全删除缓存。

          脚本随 APC 提供。

          希望他的帮助, 埃弗特

          【讨论】:

            【解决方案6】:

            这可能是因为您的代码与代码的缓存版本不匹配。

            例如,APC 有一个缓存版本的 User.php,但您对 User.php 或用户使用的数据进行了更改。即使在您部署之后,缓存版本仍在运行,因为它还没有过期。

            如果您在部署时清除 APC 缓存条目,此问题应该会消失。

            【讨论】:

              猜你喜欢
              • 2011-04-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-10-28
              • 2011-03-28
              • 1970-01-01
              • 2011-04-21
              相关资源
              最近更新 更多