在Rails中第一次缓存提取时缓慢读取缓存

时间:2014-12-19 22:36:13

标签: ruby-on-rails caching memcached dalli

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

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

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

enter image description here

我在这段代码中有一个Rails.cache.fetch调用,但是当我对它进行基准测试时,我看到它平均大约8ms,这与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

0 个答案:

没有答案