CakeSession::_startSession - Elasticache 慢
Posted
技术标签:
【中文标题】CakeSession::_startSession - Elasticache 慢【英文标题】:CakeSession::_startSession - Slow on Elasticache 【发布时间】:2017-07-09 03:14:53 【问题描述】:我们正在运行 Cakephp 2.9,并使用 Elasticache 集群进行会话存储(通过 Memcached 存储)。
我们已按照此处的建议禁用了 PHP 的内置会话垃圾收集: https://tideways.io/profiler/blog/php-session-garbage-collection-the-unknown-performance-bottleneck
session.gc_probability = 0
我们还在 CakePHP 的缓存配置中将 probability
设置为 0。
但是;正如 New Relic 所报告的,我们仍然遇到问题,偶尔我们会在 CakeSession::_startSession 中遇到严重的减速:
Elasticache 集群没有显示任何表明存在问题的指标(除非有一些我没有正确理解的指标)。
关于如何诊断此原因的任何建议?
【问题讨论】:
网络服务器是否与 ElasticCache 在同一 VPC 上? @apokryfos 是的 - 都在同一个安全组内 - 这就是你的意思吗? No VPC 与安全组不一样。 VPC 就像服务的 LAN。检查the faq pages out 是的,它被称为“VPC 安全组”。该集群与 EC2 实例位于同一 VPC 安全组中。 如果您的实例位于同一个 VPC 上(这是使用同一个 VPC 安全组所暗示的),那么我能想到的唯一其他原因是它们是t
类型的实例,并且突发配额经常被超过。
【参考方案1】:
你需要通过解耦的方式去调试,找出是哪一层导致了问题。
可以是 Cake、AWS 基础设施、网络延迟...
运行这个小的 PHP 脚本并告诉我们它花费的时间。
// memcache
$m = microtime( true );
$memcache_obj = new Memcache;
$memcache_obj->connect('myhost.cache.amazonaws.com', 11211);
printf('%.5f', microtime( true ) - $m) ;
// memcached.
$time = microtime( true );
$m = new Memcached();
$m->addServer('<elasticache node endpoint>', 11211);
$m->set('foo', 100);
var_dump($m->get('foo'));
printf('%.5f', microtime( true ) - $time) ;
如果时间没问题,问题就出在Cake上。
但老实说,我相当肯定问题出在 ElastiCache 集群上。
尝试指向节点的端点,而不是 ElastiCache 集群的端点,让我知道 ti 的情况。
【讨论】:
“Memcache”没有安装,只有“Memcached”——你知道如何用 Memcached 执行这个吗?【参考方案2】:这个问题似乎是由会话锁定引起的,我什至不知道存在这种情况。
本文解释了会话锁定的存在方式和原因: https://ma.ttias.be/php-session-locking-prevent-sessions-blocking-in-requests/
重要的是 memcached 默认开启了会话锁定。
在我们的例子中,除了身份验证之外,我们不使用会话,我们的应用程序不使用会话信息来存储用户状态(就像购物车一样),所以我们简单地使用 @987654322 禁用会话锁定@设置:
memcached.sess_locking = 0
自从进行此更改后,我们看到响应时间有了巨大的改善(平均约 200 毫秒至约 160 毫秒)。这在同时加载大量数据的 AJAX 繁重的页面上尤其明显。以前这些请求似乎是按顺序加载的,但现在它们都是同时服务的,速度上的差异令人难以置信。
虽然由于关闭会话锁定,我们可能会在未来几周/几个月内发现一些边缘情况,但这似乎是问题的原因,而且这种变化似乎已经阻止了问题的发生.
【讨论】:
【参考方案3】:在将会话移动到 AWS 上的 Memcached(EC2 和 Elasticache/Memcached)后,我们遇到了类似的网站变慢问题。以下更改解决了问题。
php.ini - session.lazy_write = Off
memcached.ini - memcached.sess_locking = Off
现在网站运行良好,速度达到预期。
但我想知道关闭这些设置是否有任何不利影响?
【讨论】:
以上是关于CakeSession::_startSession - Elasticache 慢的主要内容,如果未能解决你的问题,请参考以下文章