Tomas Pavelka created AMQ-6937: ---------------------------------- Summary: Recycling TCP/IP stack on z/OS causes an infinite error loop in transport server Key: AMQ-6937 URL: https://issues.apache.org/jira/browse/AMQ-6937 Project: ActiveMQ Issue Type: Bug Components: Broker Affects Versions: 5.15.3 Reporter: Tomas Pavelka
The ActiveMQ transport servers (e.g. TcpTransportServer) run the socket accept (java.net.ServerSocket#accept) in an infinite loop. The accept call can repeatedly fail with an exception spinning the CPU at full speed an filling up logs quickly. Here is an example of an exception that gets repeated indefinitely: java.net.SocketException: EDC5122I Input/output error. (Accept failed) at java.net.ServerSocket.implAccept(ServerSocket.java:623) at java.net.ServerSocket.accept(ServerSocket.java:582) at org.apache.activemq.transport.tcp.TcpTransportServer.run(TcpTransportServer.java:351) at java.lang.Thread.run(Thread.java:785) This is a common problem on z/OS because the pattern of running accept in a loop is used in many open source projects. For example, here is the same issue in Derby: https://issues.apache.org/jira/browse/DERBY-5347 And here in Jetty: [https://github.com/eclipse/jetty.project/issues/283] Whenever the problem appears the socket becomes unusable. Would it be possible for ActiveMQ to allow to insert a custom org.apache.activemq.transport.TransportAcceptListener that would detect the problem and do a re-bind on the socket? -- This message was sent by Atlassian JIRA (v7.6.3#76005)