【问题标题】:Session problems when APC is turned onAPC 开启时的会话问题
【发布时间】:2011-04-02 14:33:52
【问题描述】:

在我们的服务器上启用 APC 时,PHP 会话出现问题。

该应用在没有 APC 的情况下运行良好。然而,由于我们启用了 APC,当服务器负载过重时会话似乎变得混乱,即用户随机登录为另一个。一旦我们禁用 APC,一切都会恢复正常。我们似乎找不到任何有同样问题的人,除了这些人的相关问题(set-cookie 被缓存在 MS ASP 中):http://msdn.microsoft.com/en-us/magazine/cc163577.aspx#S2

其他人有类似经历吗?你能推荐一些建议吗?

PS:我们所有的会话都由 php.ini 中的文件处理。我们也在运行 apache2。

【问题讨论】:

  • FWIW 无论负载如何,我都没有遇到过 APC/会话问题
  • 您使用的是什么会话处理程序?哪个版本的 PHP/APC?
  • 我们使用的是 PHP 5.2.4 版本
  • 从这里很难分辨!你能提供更多信息吗?是否所有会话数据都与错误的会话 ID 相关联?您能否重现该错误并提供一些输出或给我一个在重负载下的小脚本(您可以使用 siege 或类似的东西对每个线程进行基准测试)产生此错误?

标签: php apache session apc


【解决方案1】:

我们在这里遇到了类似的问题。 APC 目前只是主要嫌疑人,因为它难以复制。

我们使用的是 Zend Framework w/会话管理,理论上 Zend 的代码缓存在 APC 中,当系统处于严重负载下时,代码使用以前缓存的 SID 而不是当前的。

我们的保护措施是将会话 ID 保存在会话数据中,并在检索会话时比较这些值。如果 ID 不同,我们会销毁会话并退出。

【讨论】:

    【解决方案2】:

    为了完成这篇文章,我们通过三件事成功地减少了这个问题:

    1) 我们进行了额外检查以确保 IP 与会话 ID 匹配,否则请注销用户。然后我们可以使用它来跟踪问题发生的频率。

    2) 我们切换到 XCache 并立即发现混淆的会话 ID 数量减少了。然而,在非常重的负载下,问题再次出现。

    3) 然后我们将 php 配置中 Xcache 的内存加倍(xcache.size 和 xcache.var_size),现在问题就解决了。

    所以我们怀疑 APC 或 Xcache 内存不足是问题所在。我们仍在等待,看看这是否是一个永久的解决方案。

    【讨论】:

      【解决方案3】:

      APC 出现了一个问题,即自定义会话处理对象在保存会话数据之前被破坏。它可能与您的问题无关,但在常规 PHP 关闭修复该问题之前明确调用 session_write_close

      虽然您的问题听起来有点不同,但我可以确认确实存在问题。

      【讨论】:

      • 谢谢,我们也会对此进行调查。
      【解决方案4】:

      请确认 apc 确实混淆了数据... 我能想到的唯一可能的情况是当它变满并进行stackoverflow时。 请检查使用情况并可能增加缓存大小。

      【讨论】:

      • 我们相当肯定情况确实如此,尽管这可能是一个仅在两个用户同时访问一个函数时才会发生的错误。通过启用 APC,我们可以提供更多的请求/秒,从而增加他们这样做的可能性。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多