【问题标题】:How to prevent Apache hangs when PHP APC cache completely fills up?当 PHP APC 缓存完全填满时,如何防止 Apache 挂起?
【发布时间】:2011-06-29 17:19:45
【问题描述】:

当 APC 缓存已满时,它会挂起 Apache。 Apache 响应请求,但是永远等待 APC 缓存释放一些资源,但这永远不会发生。

我使用自己的小型删除脚本每 10 分钟运行一次 CRON 作业,该脚本会从 APC 中删除过期条目。好的,我可以为 APC 添加更多内存和/或我可以更频繁地运行删除脚本。但这不是真正的解决方案,我正在寻找一些新的方法来处理问题。

【问题讨论】:

    标签: php apache apache2 apc


    【解决方案1】:

    这并不是真正的最终解决方案,但我写了我在问题中提出的小 PHP APC expunge script。此脚本由 CRON 每 10 分钟运行一次,它会手动删除过期项目。这远不是完美的解决方案,但至少它有很大帮助。

    我仍在寻找最终解决方案。

    【讨论】:

      【解决方案2】:

      我发现设置 ttl 会在缓存已满时更改 APC 的行为。默认情况下,如果 ttl 为 0,APC 必须在缓存满时清空缓存。来自手册:

      如果缓存用完 可用内存,缓存将是 如果 ttl 等于,则完全删除 0. 否则,如果 ttl 大于 0,APC 将尝试删除 过期条目。

      【讨论】:

      • 嗯,但这不会发生。当 APC 缓存完全填满时,它就会挂起,Apache 也是如此。它接受新的连接,但它们没有完成。有很多项目已过期,但 APC 不会删除它们(这在逻辑上应该)。 ttl 是否为 0 或更大也没关系。
      【解决方案3】:

      您可以尝试在经常执行的脚本中添加一行,以检查缓存是否快满了,如果是,请处理它。 此类脚本的一个示例可能是建立与数据库的连接的脚本。

      【讨论】:

      • 好吧,在每个脚本调用中执行这样的脚本会稍微减慢每个脚本的响应时间。而且大多数时候它是不需要的,因为缓存的使用处于最低水平。所以我会更频繁地执行 cron 作业,比如 5 分钟。但我仍然更喜欢一些更优雅的方法,比如 Apache 识别出问题并重新启动自己......但我还没有发现任何关于这个可能的功能......
      猜你喜欢
      • 2013-03-12
      • 2010-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多