zeromq / jeromq

Pure Java ZeroMQ
Mozilla Public License 2.0
2.36k stars 483 forks source link

Jeromq blocking when send under load #725

Open aygalinc opened 5 years ago

aygalinc commented 5 years ago

Hi,

I have a Router socket that send many message to some dealer. I have used setSendTimeOut(0) , to avoid blocking send.

I constat that Jeromq Router Socket is blocking on :

at sun.nio.ch.NativeThread.current(Native Method)
May 17 17:33:32 rzn1-snarc java[397]:   at sun.nio.ch.SourceChannelImpl.read(SourceChannelImpl.java:165)
May 17 17:33:32 rzn1-snarc java[397]:   at zmq.Signaler.recv(Signaler.java:165)
May 17 17:33:32 rzn1-snarc java[397]:   at zmq.Mailbox.recv(Mailbox.java:97)
May 17 17:33:32 rzn1-snarc java[397]:   at zmq.SocketBase.processCommands(SocketBase.java:937)
May 17 17:33:32 rzn1-snarc java[397]:   at zmq.SocketBase.send(SocketBase.java:702)
May 17 17:33:32 rzn1-snarc java[397]:   at org.zeromq.ZMQ$Socket.send(ZMQ.java:3192)
May 17 17:33:32 rzn1-snarc java[397]:   at com.se.gxl.forum.zmq.bridge.impl.ZmqWriteStreamWrapper.write(ZmqWriteStreamWrapper.java:54)
May 17 17:33:32 rzn1-snarc java[397]:   at com.se.gxl.forum.zmq.bridge.impl.ZmqWriteStreamWrapper.write(ZmqWriteStreamWrapper.java:12)
May 17 17:33:32 rzn1-snarc java[397]:   at io.vertx.ext.eventbus.bridge.tcp.impl.protocol.FrameHelper.writeFrame(FrameHelper.java:97)
May 17 17:33:32 rzn1-snarc java[397]:   at io.vertx.ext.eventbus.bridge.tcp.impl.protocol.FrameHelper.sendFrame(FrameHelper.java:58)
May 17 17:33:32 rzn1-snarc java[397]:   at com.se.gxl.forum.zmq.bridge.impl.MessageHandlerHelper.rootVertxMessageToBackendSocket(MessageHandlerHelper.java:32)
May 17 17:33:32 rzn1-snarc java[397]:   at com.se.gxl.forum.zmq.bridge.impl.RegistrationMessageHandlerImpl.lambda$null$0(RegistrationMessageHandlerImpl.java:55)
May 17 17:33:32 rzn1-snarc java[397]:   at com.se.gxl.forum.zmq.bridge.impl.RegistrationMessageHandlerImpl$$Lambda$91/4472766.handle(Unknown Source)
May 17 17:33:32 rzn1-snarc java[397]:   at io.vertx.core.eventbus.impl.HandlerRegistration.deliver(HandlerRegistration.java:264)
May 17 17:33:32 rzn1-snarc java[397]:   at io.vertx.core.eventbus.impl.HandlerRegistration.handle(HandlerRegistration.java:242)
May 17 17:33:32 rzn1-snarc java[397]:   at io.vertx.core.eventbus.impl.EventBusImpl$InboundDeliveryContext.next(EventBusImpl.java:565)
May 17 17:33:32 rzn1-snarc java[397]:   at io.vertx.core.eventbus.impl.EventBusImpl.lambda$deliverToHandler$5(EventBusImpl.java:524)
May 17 17:33:32 rzn1-snarc java[397]:   at io.vertx.core.eventbus.impl.EventBusImpl$$Lambda$122/19853555.handle(Unknown Source)
May 17 17:33:32 rzn1-snarc java[397]:   at io.vertx.core.impl.ContextImpl.executeTask(ContextImpl.java:320)
May 17 17:33:32 rzn1-snarc java[397]:   at io.vertx.core.impl.EventLoopContext.lambda$executeAsync$0(EventLoopContext.java:38)
May 17 17:33:32 rzn1-snarc java[397]:   at io.vertx.core.impl.EventLoopContext$$Lambda$25/4211148.run(Unknown Source)
May 17 17:33:32 rzn1-snarc java[397]:   at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
May 17 17:33:32 rzn1-snarc java[397]:   at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404)
May 17 17:33:32 rzn1-snarc java[397]:   at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:462)
May 17 17:33:32 rzn1-snarc java[397]:   at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:897)
May 17 17:33:32 rzn1-snarc java[397]:   at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
May 17 17:33:32 rzn1-snarc java[397]:   at java.lang.Thread.run(Thread.java:748)
imkcy9 commented 2 years ago

I have the same issue too, Router setSendTimeOut(0), but sometimes will block so I have to restart my application.

syejing commented 1 year ago

I also have the same issue. I have a Dealer socket that sends many messages to one Router and then there's a possibility of a blocking send.

fbacchella commented 1 year ago

Does it sill present with the latest snapshots ? Do you have a setup to reproduce it ?