2016-01-12 89 views
1

我有一臺運行Postgresql的服務器。在日誌中,我每分鐘多次看到基於「工作人員」複選框的此消息。有幾分鐘沒有消息,其他人可能是10次。多個無法從客戶端接收數據:由對等Postgresql和Resque重置連接

2016-01-12 13:40:36 EST:1.1.8.2(33899):[16141]: LOG: could not receive data from client: Connection reset by peer 

現在,當我進入1.1.8.2盒看netstat -ntp我沒有看到一個端口33899,其中大部分是至少在40xxx範圍內了。這可能是猜測,但我不知道爲什麼Redis/Resque/Puma Rails堆棧會打印出這些消息,更不用說即使我到底了也意味着什麼。

如果「正常」關閉,我會恢復內存嗎?

這是一件需要警惕的事情嗎?

如何調試在db數據庫和worker數據庫都不再顯示端口時打開的OLD端口?

+0

它是否始終從端口33899?對我來說,它看起來像一種監視測試,例如如果服務器仍然活着。只要打開端口並關閉端口而不讀取它就可以產生這樣的信息。 – Ctx

+0

謝謝,但它有時是遞增的,所以如果連續有五個它幾乎是33899 33890,33892 ...等不總是線性的。我猜測autovaccum正在運行,也許是從1/2小時前關閉舊的屁股端口。例如。但不知道這是否是真的,或者從那個理論開始。 – pjammer

+0

那麼你可以排除一個監測軟件檢查端口? autovacuum不關心連接。也許從提到的主機1.1.8.2的數據庫連接的tcpdump可以解決這個問題? – Ctx

回答

5

此消息可能是由於resque worker任務在退出之前未關閉數據庫連接。這不是一個大問題,但大概是Postgres做了一些額外的工作來清理它,並且它使你的日誌文件變得混亂...

一個解決方案是在你的resque worker的任務文件中添加一個鉤子(包含self.perform定義的相同文件):

def self.after_perform(*args) 
    ActiveRecord::Base.connection.disconnect! 
    end 
相關問題