【问题标题】:memcached restart with active sessions causes request to hang for 30-40 seconds and session is killed使用活动会话重新启动 memcached 会导致请求挂起 30-40 秒并且会话被终止
【发布时间】:2014-06-27 02:48:17
【问题描述】:

我正在使用 php 会话对 memcached 进行一些测试。

以下步骤会导致问题。

  1. 启动内存缓存
  2. 登录到创建会话的应用程序
  3. 重启内存缓存
  4. 尝试导航到另一个页面
  5. 浏览器挂起 30 秒并注销
  6. 再次登录后的请求需要 30 秒,但可以正常工作。随机停止执行动作需要 30 秒并恢复正常速度

这种奇怪行为的原因是什么

有时我会收到以下错误:

遇到 PHP 错误

严重性:警告

消息:未知:无法写入会话数据(内存缓存)。请验证 session.save_path 的当前设置是否正确(tcp://10.181.16.192:11211?persistent=1&weight=1&timeout=1&retry_interval=15)

文件名:未知

行号:0

编辑:

如果我重新启动 memcache 然后 apache 问题不会发生

我注意到重启 memcached 时 TCP 连接更改为 CLOSE_WAIT。

但是,如果我立即重新启动 memcache 和 apache,那么它就可以解决问题。

似乎 php 处理与 memcache 的连接的方式存在某种错误,它无法识别连接不再有效并导致所描述的问题。

[root@php-pos-web ~]# netstat -natp | grep '11211'

tcp        1      0 10.181.16.33:58722          10.181.16.192:11211         CLOSE_WAIT  7574/httpd          
tcp      205      0 10.181.16.33:58753          10.181.16.192:11211         ESTABLISHED 7583/httpd          
tcp        1      0 10.181.16.33:58745          10.181.16.192:11211         CLOSE_WAIT  7578/httpd          
tcp        1      0 10.181.16.33:58749          10.181.16.192:11211         CLOSE_WAIT  7573/httpd          

【问题讨论】:

  • 通过调试器附加,看看是什么持有请求,目前还没有算命先生。
  • 更新了更多信息

标签: php session


【解决方案1】:

从 3.0.4 开始的 memcache pecl 扩展有一个错误。这不会发生在最新的稳定版本 (2.2.7) 上。我有reported this bug 给团队。我认为这与会话锁定有关。 memcached 扩展中不会出现此错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-27
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 2021-12-06
    • 2012-01-30
    相关资源
    最近更新 更多