我无法诊断我在 ubuntu scalr/ec2 生产环境中遇到的问题。
问题显然是随机的,数据库查询和/或 memcache 查询将花费比应有的更长的时间。我见过一个简单的 select 语句需要 130 毫秒或 Memcache 提取需要 65 毫秒!每个请求可能会发生几次,导致某些请求花费的时间是应有的两倍。
为了诊断问题,我编写了一个非常简单的脚本,它只连接到 MySql 服务器并运行查询。
require 'mysql'
mysql = Mysql.init
mysql.real_connect('', '', '', '')
max = 0
100.times do
start = Time.now
mysql.query('select * from navigables limit 1')
stop = Time.now
total = stop - start
max = total if total > max
end
puts "Max Time: #{max * 1000}"
mysql.close
该脚本始终返回非常高的最大时间,因此我消除了任何 Rails 作为问题的根源。我还在 Python 中编写了相同的东西来消除 Ruby。事实上,Python 也花费了过多的时间!
MySql 和 Memcache 都在自己的盒子上,所以我考虑了网络延迟,但看ping
s 和traceroute
ing 看起来很正常。
在各自的机器上运行查询/获取也会返回预期的时间,并且我在我的登台机器上运行相同版本的 gems 而没有这个问题。
我真的很难过这个......对我可以尝试诊断的任何想法有什么想法吗?谢谢