CakeSession :: _ startSession - 在Elasticache上缓慢

use*_*976 17 php session memcached cakephp amazon-elasticache

我们正在运行CakePHP 2.9,并使用Elasticache Cluster进行会话存储(通过Memcached存储).

我们已按照此处的建议禁用了PHP的内置会话垃圾回收:https: //tideways.io/profiler/blog/php-session-garbage-collection-the-unknown-performance-bottleneck

session.gc_probability = 0

我们还在probabilityCakePHP的Cache配置中将设置设置为0.

然而; 我们仍然遇到一些问题,偶尔我们会遇到CakeSession :: _ startSession的重大减速问题,正如New Relic报道的那样:

慢CakeSession :: _ startSession

Elasticache集群没有显示任何表明存在问题的指标(除非有一些指标我不能正确理解).

有关如何诊断这一原因的任何建议?

use*_*976 1

这个问题似乎是由会话锁定引起的,我什至不知道它的存在。

本文解释了会话锁定的存在方式和原因: https://ma.ttias.be/php-session-locking-prevent-sessions-blocking-in-requests/

重要的是memcached默认开启了会话锁定

在我们的例子中,除了身份验证之外,我们不会使用会话进行太多其他用途,我们的应用程序不会使用会话信息来存储用户状态(就像购物车一样),因此我们只需使用以下设置禁用会话锁定php.ini

memcached.sess_locking = 0

自从进行此更改以来,我们看到响应时间有了巨大的改进(平均约 200 毫秒缩短到约 160 毫秒)。这在同时加载大量数据的 AJAX 密集型页面上尤其明显。以前,这些请求似乎是按顺序加载的,但现在它们都是同时提供服务的,速度上的差异令人难以置信。

虽然我们可能会在未来几周/几个月内发现一些由于关闭会话锁定而导致的边缘情况,但这似乎是问题的原因,而且这一更改似乎已经阻止了问题的发生。