我正在使用php会话对memcached进行一些测试。
以下步骤会导致问题。
- 开始memcache
- 登录创建会话的应用程序
- 重启memcache
- 尝试导航到另一个页面
- 浏览器挂起30秒并注销
- 再次登录后的请求需要30秒,但可以工作。随机停止30秒执行动作并恢复到正常速度
这种奇怪行为的原因是什么
有时我得到以下错误:
遇到PHP错误严重性:警告
消息:Unknown: Failed to write session data (memcache)。请验证当前会话设置是否正确。Save_path正确(tcp://10.181.16.192:11211?persistent=1&weight=1&timeout=1&retry_interval=15)
文件名:未知
行号:0
编辑:如果我重新启动memcache然后apache,问题不会发生
我注意到TCP连接在重新启动memcached时更改为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
在3.0.4的memcache pecl扩展中有一个bug。这在最新的稳定版本(2.2.7)中不会发生。我已经向团队报告了这个bug。我认为这与会话锁定有关。在memcached扩展中不会出现此错误。