2016-01-13 234 views
0

我一直使用rabbitmq作爲後端的芹菜。每當發送一個高負荷(約600-1000)的任務的RabbitMQ,我獲得以下錯誤 socket.error [錯誤104]連接由對等復位Rabbitmq在高負載下:Socket.error [Errno 104]由對端重置連接

我已經使用的樣本命令是:

for i in {1..500}; do python client.py queue_name time_out bash -c "sleep 20 && touch folder/$i" & done 
for i in {1..500}; do python client.py different_queue_name time_out bash -c "sleep 20 && touch folder/$i" & done 

這裏client.py發送一個任務,它在worker上執行給定的bash命令並輪詢time_out秒的結果。

我也嘗試使用此命令在一段時間內發送加載。它仍然給出了同樣的錯誤

for i in {1..10}; do for i in {1..50}; do python client.py queue_name time_out bash -c "sleep 60 && touch folder/$i" & done; sleep 10; done 
for i in {1..10}; do for i in {1..50}; do python client.py different_queue_name time_out bash -c "sleep 60 && touch folder/$i" & done; sleep 10; done 

是什麼原因造成這種行爲,我能做些什麼來處理這種情況?

+0

你檢查了日誌嗎? – Gabriele

+0

這是我正面臨的警告。 =警告報告== 文件描述符限制報警設置。消息傳遞後文件描述符是否被釋放? – Rajs123

回答

2

=WARNING REPORT== file descriptor limit alarm set.表示您達到filedescriptor限制。

你應該調整你的O.S.和RabbitMQ。

以下幾個鏈接,您應該遵循:

打開的文件句柄限制操作系統限制 同時打開的文件句柄最大數量,其中包括網絡套接字。使 確信您已將限制設置得足夠高,以允許併發連接和隊列的預期編號爲 。

確保您的環境允許至少50K打開文件 有效RabbitMQ用戶的描述符,包括在開發 環境中。

作爲一個經驗法則,將第95百分位併發連接數 連接數加2並加上隊列總數來計算 推薦的打開文件句柄限制。高達500K的值不是 不足,並且不會消耗大量硬件資源,因此建議將 用於生產設置。有關更多信息,請參閱聯網指南 。

二郎山VM I/O線程池Erlang運行時使用的線程的執行 I/O操作異步池。池的大小爲 ,通過+ A VM命令行標誌配置,例如, + A 128.我們高度推薦 重寫使用 RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS環境變量中的標誌:

RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS = 「+ A 128」 默認值是30。 有8個或更多內核可用的節點建議使用值高於96的 ,即每個內核 有12個或更多I/O線程可用。請注意,較高的值並不一定意味着更高的吞吐量或由於等待I/O而造成的較低的CPU消耗。調諧連接

某些工作負荷大 數,通常被稱爲「物聯網」,承擔 大量的每個節點的客戶端連接,並從每個節點相對較低 交通量。一種這樣的工作量是傳感器網絡:可以有數十萬或數百萬個傳感器被部署,每個傳感器每隔幾分鐘發射一次數據。優化 併發客戶端的最大數量可能比 總吞吐量更重要。

有幾個因素會限制單個 節點可以多少併發連接支持:

打開的文件句柄(包括插座)通過 由每個連接所使用的CPU資源的每個連接使用量的RAM數量的數量

希望它有幫助

相關問題