我们使用四个 Amazon EC2 实例(一个负载均衡器、一个数据库和两个应用程序),并且不断出现随机超时。我们每天至少收到一份,有时更多。以下是一些示例:
Errno::ETIMEDOUT: Connection timed out - connect(2)
/usr/local/rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/smtp.rb:546:in `initialize'
和
Timeout::Error: execution expired
[GEM_ROOT]/gems/activemodel-3.0.9/lib/active_model/attribute_methods.rb:354:in `match'
我不确定如何调试它们,因为它们与应用程序代码或服务器负载无关。 CPU 使用率通常徘徊在 10% 以下,最大峰值可达 60%。峰值很可能是由于运行备份造成的,并且与超时错误的时间不对应。
如何追踪这些类型的错误?
最佳答案
第一次超时看起来像是通过 SMTP 发送邮件的合法连接超时。您是否托管自己的 SMTP 服务器或使用服务?
看起来 sendgrid 已 experiencing delays/timeouts最近几天:
We're currently seeing lots of volume in our queues and emails may be delayed for a short period. Stay tuned for updates. #status
修复 SMTP 服务超时/失败
设置一个本地邮件中继,以保存邮件并在出现此类故障时重新发送。我们在生产中使用本地 Postfix 中继来解决这个问题(因此 ActiveMailer 使用 sendmail 到 Postfix,后者将邮件排队并通过 SMTP 中继传送到 Sendgrid)。
关于ruby - Rails 3.0 间歇性连接超时、执行过期错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7270824/