2011-09-01 94 views
2

我们使用四个Amazon EC2实例(一个负载平衡器,一个数据库和两个应用程序)并且不断发生随机超时。我们每天至少得到一次,有时甚至更多。下面是一些例子:Rails 3.0间歇性连接超时,执行过期错误

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%。峰值很可能是由于运行备份造成的,并且不符合超时错误的时间。

如何追踪这些类型的错误?

+0

我追查了第二个问题。原来是一个应用程序问题。有一些代码被困在一个循环中,所以看起来问题在其他地方。第一个,我还不确定。 –

回答

3

第一个超时看起来像通过SMTP发送邮件的合法连接超时。您是否托管您自己的SMTP服务器或使用服务?

看起来sendgrid一直experiencing delays/timeouts过去几天的:

我们目前看到很多在我们的队列和邮件量可能会延迟一小段时间。请继续关注更新。 #status

修复了SMTP服务超时/失败

设置本地邮件中继,将持有的邮件并重新发送,如果有这样的失败。我们在生产中使用本地Postfix中继来解决这个问题(因此ActiveMailer使用sendmail到Postfix,它将邮件排队并通过SMTP中继传递给Sendgrid)。

+0

我们正在使用Sendgrid。 –

+0

我已经看到了几十个这样的错误,而不仅仅是最近几天。我将用Sendgrid提出一个问题,看看他们说了些什么。 –

+0

如果您使用原始的Rails SMTP到Sendgrid,您可能需要设置一个本地邮件中继,以保存邮件并在发生类似故障时重新发送。我们在生产中使用本地Postfix中继来解决这个问题(因此ActiveMailer使用sendmail到Postfix,它将邮件排队并通过SMTP中继传递给Sendgrid)。 – Winfield