<div dir="ltr"><div>Rarely, when under more load than usual my RabbitMQ application starts returning SocketException: Broken pipe (and basically doesn't process any further messages).</div><div><br></div><div>The system is using the RPC pattern, with workers listening on a few predefined queues for jobs, clients submitting tasks on these jobs while opening a temporary auto-delete queues that they specify as replyTo queue where they listen for the replies on (and use a correlation ID as well to match the messages).</div><div><br></div><div>The code that actually leads to the Broken pipe is quite simple, it is in the client part and basically does:</div><div>&nbsp; &nbsp; factory = new ConnectionFactory();</div><div>&nbsp; &nbsp; factory.setUri(uri);</div><div>&nbsp; &nbsp; connection = factory.newConnection(); // this is when we get the exception</div><div><br></div><div>The exception is as follows:</div><div>&nbsp; &nbsp; 2013-09-06 21:37:03,947 +0000 [http-bio-8080-exec-350] ERROR RabbitRpcClient:79 &nbsp;- IOException&nbsp;</div><div>&nbsp; &nbsp; java.net.SocketException: Broken pipe</div><div>&nbsp; &nbsp; <span class="Apple-tab-span" style="white-space:pre">        </span>at java.net.SocketOutputStream.socketWrite0(Native Method)</div><div>&nbsp; &nbsp; <span class="Apple-tab-span" style="white-space:pre">        </span>at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109)</div><div>&nbsp; &nbsp; <span class="Apple-tab-span" style="white-space:pre">        </span>at java.net.SocketOutputStream.write(SocketOutputStream.java:153)</div><div>&nbsp; &nbsp; <span class="Apple-tab-span" style="white-space:pre">        </span>at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)</div><div>&nbsp; &nbsp; <span class="Apple-tab-span" style="white-space:pre">        </span>at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)</div><div>&nbsp; &nbsp; <span class="Apple-tab-span" style="white-space:pre">        </span>at java.io.DataOutputStream.flush(DataOutputStream.java:123)</div><div>&nbsp; &nbsp; <span class="Apple-tab-span" style="white-space:pre">        </span>at com.rabbitmq.client.impl.SocketFrameHandler.flush(SocketFrameHandler.java:142)</div><div>&nbsp; &nbsp; <span class="Apple-tab-span" style="white-space:pre">        </span>at com.rabbitmq.client.impl.AMQConnection.flush(AMQConnection.java:488)</div><div>&nbsp; &nbsp; <span class="Apple-tab-span" style="white-space:pre">        </span>at com.rabbitmq.client.impl.AMQCommand.transmit(AMQCommand.java:125)</div><div>&nbsp; &nbsp; <span class="Apple-tab-span" style="white-space:pre">        </span>at com.rabbitmq.client.impl.AMQChannel.quiescingTransmit(AMQChannel.java:316)</div><div>&nbsp; &nbsp; <span class="Apple-tab-span" style="white-space:pre">        </span>at com.rabbitmq.client.impl.AMQChannel.transmit(AMQChannel.java:292)</div><div>&nbsp; &nbsp; <span class="Apple-tab-span" style="white-space:pre">        </span>at com.rabbitmq.client.impl.AMQChannel.transmit(AMQChannel.java:285)</div><div>&nbsp; &nbsp; <span class="Apple-tab-span" style="white-space:pre">        </span>at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:383)</div><div>&nbsp; &nbsp; <span class="Apple-tab-span" style="white-space:pre">        </span>at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:516)</div><div>&nbsp; &nbsp; <span class="Apple-tab-span" style="white-space:pre">        </span>at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:533) &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; ...</div><div><br></div><div>I think this generally coincides with the workers taking longer than usual about their business, and thus more temporary client queues concurrently open (about 20-30 perhaps?), however as far as I know I'm not running into any of the usual watermarks (memory, disk - I could be running into some limit I don't know about).</div><div><br></div><div>I've reviewed the Rabbit logs and the only kind of errors I find there are:</div><div><br></div><div>&nbsp; &nbsp; =ERROR REPORT==== 6-Sep-2013::21:36:59 ===</div><div>&nbsp; &nbsp; closing AMQP connection &lt;0.3105.1297&gt; (10.118.69.132:42582 -&gt; 10.12.111.134:5672):</div><div>&nbsp; &nbsp; {handshake_timeout,frame_header}</div><div><br></div><div>I checked both logs and the first "broken pipe" on the client appeared at 21:37:03, while the first ERROR of any kind in RabbitMQ logs on that date appeared at 21:36:59, with regular errors of the same kind appearing regularly thereafter until the systems were restarted. Thus I believe the ones published are corresponding log entries.&nbsp;</div><div><br></div><div>I'm using the Rabbit Java client 3.1.4 (latest on Maven central) with Rabbit server 3.1.4 running on Amazon Linux un AWS EC2.</div><div><br></div><div>Here is the rabbitmqctl status under normal situation (unfortunately not during the failure, I will try to get one when it appears next):</div><div><br></div><div><div>[rabbitmq]$ sudo rabbitmqctl status</div><div>Status of node 'rabbit@ip-some-ip' ...</div><div>[{pid,2654},</div><div>&nbsp;{running_applications,</div><div>&nbsp; &nbsp; &nbsp;[{rabbitmq_management,"RabbitMQ Management Console","3.1.4"},</div><div>&nbsp; &nbsp; &nbsp; {rabbitmq_management_agent,"RabbitMQ Management Agent","3.1.4"},</div><div>&nbsp; &nbsp; &nbsp; {rabbit,"RabbitMQ","3.1.4"},</div><div>&nbsp; &nbsp; &nbsp; {os_mon,"CPO &nbsp;CXC 138 46","2.2.7"},</div><div>&nbsp; &nbsp; &nbsp; {rabbitmq_web_dispatch,"RabbitMQ Web Dispatcher","3.1.4"},</div><div>&nbsp; &nbsp; &nbsp; {webmachine,"webmachine","1.10.3-rmq3.1.4-gite9359c7"},</div><div>&nbsp; &nbsp; &nbsp; {mochiweb,"MochiMedia Web Server","2.7.0-rmq3.1.4-git680dba8"},</div><div>&nbsp; &nbsp; &nbsp; {xmerl,"XML parser","1.2.10"},</div><div>&nbsp; &nbsp; &nbsp; {inets,"INETS &nbsp;CXC 138 49","5.7.1"},</div><div>&nbsp; &nbsp; &nbsp; {mnesia,"MNESIA &nbsp;CXC 138 12","4.5"},</div><div>&nbsp; &nbsp; &nbsp; {amqp_client,"RabbitMQ AMQP Client","3.1.4"},</div><div>&nbsp; &nbsp; &nbsp; {sasl,"SASL &nbsp;CXC 138 11","2.1.10"},</div><div>&nbsp; &nbsp; &nbsp; {stdlib,"ERTS &nbsp;CXC 138 10","1.17.5"},</div><div>&nbsp; &nbsp; &nbsp; {kernel,"ERTS &nbsp;CXC 138 10","2.14.5"}]},</div><div>&nbsp;{os,{unix,linux}},</div><div>&nbsp;{erlang_version,</div><div>&nbsp; &nbsp; &nbsp;"Erlang R14B04 (erts-5.8.5) [source] [64-bit] [smp:2:2] [rq:2] [async-threads:30] [kernel-poll:true]\n"},</div><div>&nbsp;{memory,</div><div>&nbsp; &nbsp; &nbsp;[{total,331967824},</div><div>&nbsp; &nbsp; &nbsp; {connection_procs,5389784},</div><div>&nbsp; &nbsp; &nbsp; {queue_procs,2669016},</div><div>&nbsp; &nbsp; &nbsp; {plugins,654768},</div><div>&nbsp; &nbsp; &nbsp; {other_proc,10063336},</div><div>&nbsp; &nbsp; &nbsp; {mnesia,90352},</div><div>&nbsp; &nbsp; &nbsp; {mgmt_db,2706344},</div><div>&nbsp; &nbsp; &nbsp; {msg_index,7148168},</div><div>&nbsp; &nbsp; &nbsp; {other_ets,3495648},</div><div>&nbsp; &nbsp; &nbsp; {binary,1952040},</div><div>&nbsp; &nbsp; &nbsp; {code,17696200},</div><div>&nbsp; &nbsp; &nbsp; {atom,1567425},</div><div>&nbsp; &nbsp; &nbsp; {other_system,278534743}]},</div><div>&nbsp;{vm_memory_high_watermark,0.4},</div><div>&nbsp;{vm_memory_limit,3126832332},</div><div>&nbsp;{disk_free_limit,1000000000},</div><div>&nbsp;{disk_free,1487147008},</div><div>&nbsp;{file_descriptors,</div><div>&nbsp; &nbsp; &nbsp;[{total_limit,349900},</div><div>&nbsp; &nbsp; &nbsp; {total_used,71},</div><div>&nbsp; &nbsp; &nbsp; {sockets_limit,314908},</div><div>&nbsp; &nbsp; &nbsp; {sockets_used,66}]},</div><div>&nbsp;{processes,[{limit,1048576},{used,930}]},</div><div>&nbsp;{run_queue,0},</div><div>&nbsp;{uptime,5680}]</div><div>...done.</div></div><div><br></div><div>Any ideas what could be wrong or at least what I can do to debug this / get more clarity on what is happening?</div><div><br></div><div>Best regards,</div><div>John</div><div><br></div></div>