Socket

即使遠端程序停止,套接字仍保持 ESTABLISHED

  • January 26, 2016

我正在客戶端和伺服器之間執行celery-rabbitmq配置。客戶端程序在伺服器上的埠 5672 上打開一個連接。在伺服器上使用netstat -np我確認,因為套接字報告 ESTABLISHED。

客戶端上的程序崩潰了,它不再存在。但netstat -np仍然顯示連接已建立。我也在netstat -np客戶端上執行,並確認沒有程序連接到該埠上的伺服器。

為什麼套接字保持在 ESTABLISHED 狀態?

如果客戶端沒有正確關閉連接(對於長時間執行的任務),AMQP要求連接的伺服器端保持打開狀態。在這篇文章中閱讀更多內容。

您可以手動關閉這些連接,也可以使用rabbitmqctlcron 作業編寫腳本來為您完成此操作,但這兩種方法都是針對應用程序級問題的相當醜陋的外部方法。

如果可以,請打開心跳並將超時設置為比已知最長的處理任務多 15-20%。這應該在心跳超時後回收那些“死”連接,但要小心,因為它也會斷開任何已經忙碌太久的客戶端。

有關heartbeatrabbitmqctl的更多資訊(請參閱雜項部分)。

引用自:https://unix.stackexchange.com/questions/257775