Shutting down Netty server when client connections are open -


i'm trying shutdown netty server has open connections it, , hangs. here's do.

  • start server on 1 machine , client on another.
  • send message client server response.
  • shutdown server using ctrl-c

i've registered shutdown hook on server closes channelgroup , calls releaseexternalresources on serverbootstrap (or i'm using duplextcpserverbootstrap of protobuf-pro-duplex library that). anyway, shutdown hook called on shutdown, never returns. when take thread dump of what's happening can see 2 interesting stacks:

   java.lang.thread.state: timed_waiting (parking)     @ sun.misc.unsafe.park(native method)     - parking wait  <0x00000006b0890950> (a java.util.concurrent.locks.abstractqueuedsynchronizer$conditionobject)     @ java.util.concurrent.locks.locksupport.parknanos(locksupport.java:226)     @ java.util.concurrent.locks.abstractqueuedsynchronizer$conditionobject.awaitnanos(abstractqueuedsynchronizer.java:2082)     @ java.util.concurrent.threadpoolexecutor.awaittermination(threadpoolexecutor.java:1433)     @ org.jboss.netty.util.internal.executorutil.terminate(executorutil.java:103)     @ org.jboss.netty.channel.socket.nio.abstractnioworkerpool.releaseexternalresources(abstractnioworkerpool.java:80)     @ org.jboss.netty.channel.socket.nio.nioserversocketchannelfactory.releaseexternalresources(nioserversocketchannelfactory.java:162)     @ org.jboss.netty.bootstrap.bootstrap.releaseexternalresources(bootstrap.java:319)     @ com.googlecode.protobuf.pro.duplex.server.duplextcpserverbootstrap.releaseexternalresources(duplextcpserverbootstrap.java:132)     @ com.xxx.yyy.node.nodeserver$2.run(nodeserver.java:104)     @ java.lang.thread.run(thread.java:722) 

so shutdown hook thread never returns. , below thread seems waiting on channel:

   java.lang.thread.state: runnable     @ sun.nio.ch.epollarraywrapper.interrupt(native method)     @ sun.nio.ch.epollarraywrapper.interrupt(epollarraywrapper.java:274)     @ sun.nio.ch.epollselectorimpl.wakeup(epollselectorimpl.java:193)     - locked <0x00000006b0896660> (a java.lang.object)     @ java.nio.channels.spi.abstractselector$1.interrupt(abstractselector.java:210)     @ java.nio.channels.spi.abstractselector.begin(abstractselector.java:216)     @ sun.nio.ch.epollselectorimpl.doselect(epollselectorimpl.java:80)     @ sun.nio.ch.selectorimpl.lockanddoselect(selectorimpl.java:87)     - locked <0x00000006b08964a8> (a sun.nio.ch.util$2)     - locked <0x00000006b0896498> (a java.util.collections$unmodifiableset)     - locked <0x00000006b0890d20> (a sun.nio.ch.epollselectorimpl)     @ sun.nio.ch.selectorimpl.select(selectorimpl.java:98)     @ org.jboss.netty.channel.socket.nio.selectorutil.select(selectorutil.java:52)     @ org.jboss.netty.channel.socket.nio.abstractnioworker.run(abstractnioworker.java:208)     @ org.jboss.netty.channel.socket.nio.nioworker.run(nioworker.java:38)     @ org.jboss.netty.util.threadrenamingrunnable.run(threadrenamingrunnable.java:102)     @ org.jboss.netty.util.internal.deadlockproofworker$1.run(deadlockproofworker.java:42)     @ java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1110)     @ java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:603)     @ java.lang.thread.run(thread.java:722) 

i'm using netty 3.4.6.final java 7.04 on linux. thanks!

br, frank.

had same 'problem' bare netty client/server well.

thing is, closing server channel not close open channels created accepted client connections. 1 has explicitly keep track of client channels in server. can done channel groups , handler adds client channels group. when comes shutting down server, channels in group should closed in batch-like manner instead of 1 server channel (which can put channel group well).

there excellent documentation in user guide (9. shutting down application): http://static.netty.io/3.5/guide/ , channelgroup api doc (simplify shutdown process channelgroup): http://static.netty.io/3.5/api/org/jboss/netty/channel/group/channelgroup.html


Comments

Popular posts from this blog

django - How can I change user group without delete record -

java - Need to add SOAP security token -

java - EclipseLink JPA Object is not a known entity type -