由 Memcached 处理的 PHP 会话仍在磁盘上


PHP Sessions handled by Memcached still on disk

我们在Nginx下设置了PHP5 FPM。我们使用 Memcached 作为我们的会话处理程序。

session.save_handler=memcached

我的期望是,尽管有一些致命的错误,比如我们的Memcached服务器的死亡),所有会话都应该进入Memcached,而不是磁盘。

但是,在检查我们的应用程序时,我在 Memcached AND 上发现了/var/lib/php5/fpm/上的会话。

一些故障排除:

  1. 我们肯定会在Memcached上设置新的会话。但是,我在磁盘上找到的某些会话不会出现在Memcached上
  2. 基于文件的会话上的时间戳肯定是最近的 - 当前分钟有文件。
  3. 文件的权限是针对安装用户的 - 而不是 root。

尽管上面已经说过第 3 点,但仍有一些文件具有 root 用户和组所有权。我觉得这很奇怪。为什么会有 root 拥有的会话?这意味着任何尝试检查文件(顺便说一句,具有 0600 权限)的人都会失败。

所以,我想我的问题相当于:

  1. 尽管我们使用Memcached,但在磁盘上创建新的会话文件是否有效?
  2. 知道为什么我们会有具有根所有权的会话文件吗?

对于上下文:我正在研究非常零星的会话到期问题。在增加了 Memcached 内存限制和并发连接(并最终修复了大量实例)之后,我们仍然会遇到少量会话到期。无论如何,这只是上下文 - 可能并不重要。

会话

文件是由 cron 启动php-cli创建的。 CLI 配置与 FPM One 不同,它使用默认的文件会话处理程序。

编辑

重要的是,cronjob 必须命中一段手动启动会话
的代码
PHP5-CLI 的配置指令session.auto_start必须设置为 true