ubuntu scalr/ec2 本番環境で発生している問題を診断するのに苦労しています。
問題は明らかにランダムで、データベース クエリや memcache クエリに必要以上に長い時間がかかります。単純な select ステートメントで 130 ミリ秒、Memcache フェッチで 65 ミリ秒かかることがわかりました。リクエストごとに数回発生する可能性があり、一部のリクエストは本来の 2 倍の時間がかかります。
問題を診断するために、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 を排除しました。Ruby をなくすために、Python でも同じことを書きました。実際、Python の場合も非常に時間がかかりました。
MySql も Memcache もそれぞれ別のボックスにあるので、ネットワーク レイテンシーを考慮しましたが、ping
s とtraceroute
ing の監視は正常に見えます。
また、それぞれのマシンでクエリ/フェッチを実行すると、予想される時間が返されます。ステージング マシンで同じバージョンの gem を実行しても、この問題は発生しません。
私は本当にこれに困惑しています...これを診断しようとすることができる何かについての考えはありますか? ありがとう