2011-09-01 91 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