0

我无法诊断我在 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 都在自己的盒子上,所以我考虑了网络延迟,但看pings 和tracerouteing 看起来很正常。

在各自的机器上运行查询/获取也会返回预期的时间,并且我在我的登台机器上运行相同版本的 gems 而没有这个问题。

我真的很难过这个......对我可以尝试诊断的任何想法有什么想法吗?谢谢

4

2 回答 2

0

我唯一的想法是它可能是磁盘?

于 2009-05-14T03:52:13.803 回答
0

Mysql 使用查询缓存来存储 SELECT 及其结果。这可以解释您在连续选择中获得的恒定速度。尝试 EXPLAIN-inig 查询以查看您是否正在使用索引。

我不明白为什么 memcache 会成为问题(除非它崩溃并重新启动?)。检查您的服务器日志中是否存在可疑的服务故障。

于 2010-12-15T18:14:14.603 回答