Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[jetty-users] Jetty completely unresponsive, seems to be caused by ChannelEndPoint.close()

Jetty version: 7.6.2
Java version: 1.6.0 U30

Every once in a while, Jetty all but completely stops responding to HTTP/HTTPS connections. I got a Java thread dump, and tracing through the locks, it looks like there's a single org.eclipse.jetty.io.nio.ChannelEndPoint.close() which, via locks, seems to block all other close()s, bringing everything to a grinding halt.

There are a ton of threads, all with very similar/identical stack traces, waiting for one lock:
"qtp683347213-21440" prio=10 tid=0x00002aaab57ac000 nid=0x3172 waiting for monitor entry [0x0000000042d8f000]
   java.lang.Thread.State: BLOCKED (on object monitor)
        at java.nio.channels.spi.AbstractSelector.cancel(Unknown Source)
        - waiting to lock <0x00000006e659db48> (a java.util.HashSet)
        at java.nio.channels.spi.AbstractSelectionKey.cancel(Unknown Source)
        - locked <0x00000007398808d0> (a sun.nio.ch.SelectionKeyImpl)
        at org.eclipse.jetty.io.nio.SelectChannelEndPoint.close(SelectChannelEndPoint.java:691)
        at org.eclipse.jetty.io.nio.SslConnection$SslEndPoint.close(SslConnection.java:652)
        at org.eclipse.jetty.server.AsyncHttpConnection.onInputShutdown(AsyncHttpConnection.java:194)
        at org.eclipse.jetty.io.nio.SslConnection.handle(SslConnection.java:210)
        at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:609)
        at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:45)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:599)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:534)
        at java.lang.Thread.run(Unknown Source)

Which is held by this thread, which is waiting for another lock:
"qtp683347213-90 Selector7" prio=10 tid=0x000000004f5c3000 nid=0x7773 waiting for monitor entry [0x0000000041bdb000]
   java.lang.Thread.State: BLOCKED (on object monitor)
        at sun.nio.ch.SocketChannelImpl.kill(Unknown Source)
        - waiting to lock <0x00000007398806a0> (a java.lang.Object)
        at sun.nio.ch.EPollSelectorImpl.implDereg(Unknown Source)
        at sun.nio.ch.SelectorImpl.processDeregisterQueue(Unknown Source)
        - locked <0x00000006e659db48> (a java.util.HashSet)
        at sun.nio.ch.EPollSelectorImpl.doSelect(Unknown Source)
        at sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source)
        - locked <0x00000006e659e300> (a sun.nio.ch.Util$2)
        - locked <0x00000006e659e2f0> (a java.util.Collections$UnmodifiableSet)
        - locked <0x00000006e659daf0> (a sun.nio.ch.EPollSelectorImpl)
        at sun.nio.ch.SelectorImpl.selectNow(Unknown Source)
        at org.eclipse.jetty.io.nio.SelectorManager$SelectSet.doSelect(SelectorManager.java:531)
        at org.eclipse.jetty.io.nio.SelectorManager$1.run(SelectorManager.java:285)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:599)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:534)
        at java.lang.Thread.run(Unknown Source)

Which is held by this thread:
"qtp683347213-19755" prio=10 tid=0x000000005005b800 nid=0x7f5e runnable [0x00000000440a3000]
   java.lang.Thread.State: RUNNABLE
        at sun.nio.ch.FileDispatcher.preClose0(Native Method)
        at sun.nio.ch.SocketDispatcher.preClose(Unknown Source)
        at sun.nio.ch.SocketChannelImpl.implCloseSelectableChannel(Unknown Source)
        - locked <0x00000007398806a0> (a java.lang.Object)
        at java.nio.channels.spi.AbstractSelectableChannel.implCloseChannel(Unknown Source)
        at java.nio.channels.spi.AbstractInterruptibleChannel.close(Unknown Source)
        - locked <0x000000073987aea0> (a java.lang.Object)
        at org.eclipse.jetty.io.nio.ChannelEndPoint.close(ChannelEndPoint.java:205)
        at org.eclipse.jetty.io.nio.SelectChannelEndPoint.close(SelectChannelEndPoint.java:700)
        at org.eclipse.jetty.io.nio.SslConnection$SslEndPoint.close(SslConnection.java:652)
        at org.eclipse.jetty.server.AsyncHttpConnection.onInputShutdown(AsyncHttpConnection.java:194)
        at org.eclipse.jetty.io.nio.SslConnection.handle(SslConnection.java:210)
        at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:609)
        at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:45)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:599)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:534)
        at java.lang.Thread.run(Unknown Source)


This happens very sporadically, and so I can't reproduce it on demand. I'd expect that there are certain environmental factors that cause this, but I don't know what those are.

Any thoughts about this?

Back to the top