3

我在我的 Rails 应用程序中看到一些非常慢的缓存读取。redis (redis-rails) 和 memcached (dalli) 都产生了相同的结果。

看起来它只是第一次调用 Rails.cache 导致缓慢(平均 500 毫秒)。

我正在使用天窗来检测我的应用程序并看到如下图表:

在此处输入图像描述

我在这段代码中有一个 Rails.cache.fetch 调用,但是当我对其进行基准测试时,我看到它的平均时间约为 8 毫秒,这与 memcache-top 显示的平均调用时间相匹配。

我认为这可能是缓慢打开的 dalli 连接,但基准测试也没有显示任何缓慢。我不知道还有什么要检查的。

有没有人有任何好的技术可以在 Rails 应用程序中跟踪这类事情?

编辑#1

Memcache 服务器存储在 ENV['MEMCACHE_SERVERS'] 中,所有服务器都在 us-east-1 数据中心。

缓存配置如下所示:

  config.cache_store = :dalli_store, nil, { expires_in: 1.day, compress: true }

我跑了类似的东西:

100000.times { Rails.cache.fetch('something') }

并计算了平均时间,并在我的一个网络服务器上运行时得到了大约 8 毫秒的时间。

测试我的第一个请求的理论很慢,我在我的 Web 服务器上打开了一个控制台并运行以下命令作为第一个命令。

irb(main):002:0> Benchmark.ms { Rails.cache.fetch('someth') { 1 } }
Dalli::Server#connect my-cache.begfpc.0001.use1.cache.amazonaws.com:11211
=> 12.043342

编辑#2

好的,我将 fetch 拆分为读取和写入,并使用 statsd 独立跟踪它们。看起来平均值与我预期的差不多,但读取的最大时间非常尖锐,达到了 500 毫秒的范围。

http://s16.postimg.org/5xlmihs79/Screen_Shot_2014_12_19_at_6_51_16_PM.png

4

0 回答 0