我看到来自Symfony2会话管理器组件的非常奇怪的行为。特别是,SessionHandlerProxy :: read()函数在我的生产环境中偶尔会非常慢。
Symfony\Component\HttpFoundation\Session\Storage\Proxy\SessionHandlerProxy::read
我在运行Ubuntu的Amazon EC2上使用Apache2,使用默认的Symfony2会话存储(不是Redis,或者类似的东西),虽然我想知道我是否应该这样做。我安装了NewRelic来跟踪报告以下内容的交易:
缓慢的反应是间歇性的,我没有注意到请求/分钟和慢的会话读取时间之间有任何明显的相关性。我很难过,有什么想法可以试试吗?
答案 0 :(得分:1)
我在一个项目上碰到了类似的东西。当我们切换到redis进行会话处理时我确定了它(我们已经切换回PHP的默认文件系统处理程序,问题仍然间歇性地发生)。
可能发生的事情是SessionHandlerProxy :: read()方法被锁定在会话之外,并且进程正在等待会话解锁。
会话锁定是好事,因为它会阻止php中的race conditions。所以可能发生的是另一个请求当前正在访问会话而不是尽可能立即释放它。我通过google fu skills找到的解决方案在您完成会话后立即调用$ session-> save()处理程序,该实习生调用session_write_close()(这会解锁会话以进行下一个请求)。 / p>
我希望这会有所帮助!