我们在Nginx下设置了PHP5 FPM。我们使用 Memcached 作为我们的会话处理程序。
session.save_handler=memcached
我的期望是,尽管有一些致命的错误,比如我们的Memcached服务器的死亡),所有会话都应该进入Memcached,而不是磁盘。
但是,在检查我们的应用程序时,我在 Memcached AND 上发现了/var/lib/php5/fpm/
上的会话。
一些故障排除:
- 我们肯定会在Memcached上设置新的会话。但是,我在磁盘上找到的某些会话不会出现在Memcached上
- 基于文件的会话上的时间戳肯定是最近的 - 当前分钟有文件。
- 文件的权限是针对安装用户的 - 而不是 root。
尽管上面已经说过第 3 点,但仍有一些文件具有 root 用户和组所有权。我觉得这很奇怪。为什么会有 root 拥有的会话?这意味着任何尝试检查文件(顺便说一句,具有 0600 权限)的人都会失败。
所以,我想我的问题相当于:
- 尽管我们使用Memcached,但在磁盘上创建新的会话文件是否有效?
- 知道为什么我们会有具有根所有权的会话文件吗?
对于上下文:我正在研究非常零星的会话到期问题。在增加了 Memcached 内存限制和并发连接(并最终修复了大量实例)之后,我们仍然会遇到少量会话到期。无论如何,这只是上下文 - 可能并不重要。
文件是由 cron 启动php-cli
创建的。 CLI 配置与 FPM One 不同,它使用默认的文件会话处理程序。
编辑
重要的是,cronjob 必须命中一段手动启动会话
的代码或
PHP5-CLI 的配置指令session.auto_start
必须设置为 true