【发布时间】:2014-04-11 09:29:33
【问题描述】:
我注意到我们的 Memcached 会话处理程序存在间歇性问题。出现的错误是:
未知:无法写入会话数据 (memcache)。请确认 session.save_path 的当前设置是正确的。
注意事项:
- 这似乎是一个间歇性问题,每天对不同的用户发生 5 或 6 次。
- Memcached 不是本地主机。即,它与 Web 服务器位于不同的服务器上。
- 我正在使用 Memcache 扩展(而不是 MemcacheD 扩展)。
- 我正在使用 tcp 前缀。如果您查看this question,您会发现“修复”是在使用 Memcache 扩展时将 tcp:// 作为前缀。
我的 php.ini 设置:
session.save_handler = memcache
session.save_path = "tcp://64.233.191.255:11211"
请注意,我也使用过:
session.save_path = "tcp://64.233.191.255:11211?persistent=1&weight=1&timeout=1&retry_interval=15"
但这似乎并不重要。
查看了memcached.log文件,发现如下错误:
写入失败,不是由于阻塞:对等方重置连接。
注意:此特定错误每天在同一时间 (01:07AM) 至少发生一次。然后它会在一天中偶尔发生。
【问题讨论】:
-
在web服务器的日志中出现错误时,您是否检查过memcache服务器的日志文件?看起来像一个连接问题。也许是因为负载偷看?
-
我会去解决网络问题。 memcache 机器上的一些 cron 作业?暂时的高网络负载?
-
@PawełSpychalski 是的。机器上有 cron 作业。我们有一个在午夜运行的数据库备份。但是,这台机器有很多内核,它经常看到 4.00+ 凌晨 1:09 的负载将是非常低的峰值。
-
@WayneWhitty 仍然在凌晨 1:09 发生了一些事情,是什么导致了这些网络问题。你确定没有一个 crons 没有重新启动 memcache 或做一些令人讨厌的事情吗?
-
你的服务器在 tcp 级别的超时设置是什么?也许它只是不是内存缓存服务器本身,而是由于数据库响应缓慢和超时而运行时间更长的脚本。就像在某个时刻,您正在等待数据库回复并随后将其写入您的内存缓存,但此时连接已经超时