Hi all, me again :-) I have debugged this issue further and have probably found a simple fix. I've migrated from 2.0.x to 2.1.x in the mean time and both version are affected by this issue.
The "Unable to establish loopback connection" problem surfaces when using resources that return WritableRepresentation objects. In the stack trace below, ChannelRepresentation.write(OutputStream) converts the writable channel to a readable one through WritableRepresentation.getChannel() and NioUtils.getReadableByteChannel(...). This last method uses a java.nio.channels.Pipe as a buffer between the writer and reader. Because this pipe isn't closed/released in time, the system will run out of available ports under high load, resulting in the shown stack trace. Making sure that the reader-side of the pipe is always closed could help to resolve this issue, but there's a more elegant solution that doesn't use ports. This solution is to override write(OutputStream) in WritableRepresentation, wrap the OutputStream in a WritableByteChannel using e.g. java.nio.channels.Channels.newChannel(...) and pass that to WritableRepresentation.write(WritableByteChannel). Gut feeling is that this might even improve the performance as it feels like a lighter weight approach than using the system's pipes. WDYT? Can we get this fix? Cheers, Arjohn On 20/04/2012 10:01, Arjohn Kampman wrote: > Hi all, > > My restlet server is running into the error mentioned in the subject > after a couple of minutes of moderate load. After this error, the server > stops responding. Does anyone know what causes this error and how it can > be fixed? > > The full stack trace looks like this: > > org.restlet.engine.http.adapter.ServerAdapter commit > SEVERE: An exception occured writing the response entity > java.io.IOException: Unable to establish loopback connection > at sun.nio.ch.PipeImpl$Initializer.run(PipeImpl.java:106) > at java.security.AccessController.doPrivileged(Native Method) > at sun.nio.ch.PipeImpl.<init>(PipeImpl.java:122) > at > sun.nio.ch.SelectorProviderImpl.openPipe(SelectorProviderImpl.java:27) > at java.nio.channels.Pipe.open(Pipe.java:133) > at org.restlet.engine.io.NioUtils.getChannel(NioUtils.java:160) > at > org.restlet.representation.WritableRepresentation.getChannel(WritableRepresentation.java:65) > at > org.restlet.representation.ChannelRepresentation.write(ChannelRepresentation.java:71) > at > org.restlet.engine.application.EncodeRepresentation.write(EncodeRepresentation.java:304) > at > org.restlet.engine.http.ServerCall.writeResponseBody(ServerCall.java:550) > at org.restlet.engine.http.ServerCall.sendResponse(ServerCall.java:488) > at > org.restlet.ext.jetty.internal.JettyCall.sendResponse(JettyCall.java:327) > at > org.restlet.engine.http.adapter.ServerAdapter.commit(ServerAdapter.java:197) > at > org.restlet.engine.http.HttpServerHelper.handle(HttpServerHelper.java:151) > at > org.restlet.ext.jetty.JettyServerHelper$WrappedServer.handle(JettyServerHelper.java:167) > at > org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:594) > at > org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:1042) > at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:549) > at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:211) > at > org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:424) > at > org.eclipse.jetty.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:506) > at > org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:436) > at java.lang.Thread.run(Thread.java:662) > Caused by: java.net.SocketException: No buffer space available (maximum > connections reached?): connect > at sun.nio.ch.Net.connect(Native Method) > at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:500) > at java.nio.channels.SocketChannel.open(SocketChannel.java:146) > at sun.nio.ch.PipeImpl$Initializer.run(PipeImpl.java:78) > > > Any help would be highly appreciated. Thanks in advance! > -- Arjohn Kampman - www.aduna-software.com ------------------------------------------------------ http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=2952569