我在诊断我在ubuntu scalr / ec2生产环境中遇到的问题时遇到了问题。
问题显然是随机的,数据库查询和/或内存缓存查询将花费更长的时间。我看过一个简单的select语句需要130ms或者Memcache fetch需要花费65ms!每个请求可能会发生几次,导致某些请求需要两倍的时间。
为了诊断问题,我编写了一个非常简单的脚本,它只是连接到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
和traceroute
看起来很正常。
同样在相应的计算机上运行查询/提取会返回预期的时间,并且我在我的登台计算机上运行相同版本的gems而没有此问题。
我真的很难过这个...对我可以尝试诊断的事情的任何想法? 感谢
答案 0 :(得分:0)
我唯一的想法是它可能是磁盘?
答案 1 :(得分:0)
Mysql使用查询缓存将SELECT与其结果一起存储。这可以解释你在不断选择中所获得的恒定速度。尝试EXPLAIN-inig查询以查看您是否使用索引。
我不明白为什么memcache会成为一个问题(unles它崩溃并重新启动?)。检查服务器日志中是否有可疑的服务故障。