【问题标题】:Zend_Session::Start intolerably slow (but only sometimes)Zend_Session::Start 慢得让人无法忍受(但只是有时)
【发布时间】:2014-05-14 16:23:32
【问题描述】:

是的,我读过session_start seems to be very slow (but only sometimes),但我的问题略有不同。

我们有一个 PHP 应用程序,它将非常简单的会话存储在 memcached(具体来说是弹性缓存)中,并且一直在监控我们性能最慢的页面加载。几乎所有慢的人大部分时间都花在Zend_Session::Start,我们不知道为什么。这是一个非常AJAX-y 的前端,越来越多地向单页应用程序发展,每次页面加载都会同时向后端发出许多请求,其中一些请求的时间是它们应该基于的时间的三到四倍仅此而已。

显然,并不是每个请求,但我们所关心的就足够了。有没有其他人看到过这种行为?我们的印象是 memcache 没有阻塞(怎么可能?),所以最糟糕的情况是用户有一个 bum 会话,但 session_start 中的 multiple-second 等待时间似乎莫名其妙。

【问题讨论】:

  • 你对 memcached 的使用会不会超出物理内存量并进入交换空间?
  • 我已经让 phpmemcacheadmin 运行并密切关注集群,但它看起来不像——我们没有填充分配的内存,并且已经使用更大的 elasticache 集群进行了测试没有定论。

标签: php session zend-framework memcached amazon-elasticache


【解决方案1】:

看看你的会话垃圾收集机制(玩概率和除数)。

如果 gc 使应用程序变慢,请考虑手动清理旧会话(例如,将 gc 概率设置为 1 并通过 cron 运行 gc 脚本)。

另一种可能性:

  • 会话机制被锁定(因此应用等待解锁,然后写入)
  • 保存的数据过多

【讨论】:

  • 我们已经设置了gc_probability => 1,所以这似乎不太可能。 “会话机制被锁定”是什么意思?
  • 等一下,您可能实际上是指将gc_probability 设置为 0。无论哪种方式,我们只是在暂存环境中进行了一些试验,然后出现了相同的三秒以上的痕迹。
  • 我接受这是“正确”的答案,尽管它对我们的情况没有多大帮助,因为它是开始寻找的正确位置。
猜你喜欢
  • 1970-01-01
  • 2011-07-26
  • 1970-01-01
  • 2015-05-10
  • 1970-01-01
  • 2013-10-19
  • 2014-01-09
  • 1970-01-01
相关资源
最近更新 更多