Code: Select all
12:49:04.062 [Timer-0] ERROR com.ltsllc.miranda.netty.OutboundHeartBeatHandler - heartbeat start failed
io.netty.util.IllegalReferenceCountException: refCnt: 0
at io.netty.buffer.AbstractByteBuf.ensureAccessible(AbstractByteBuf.java:1480)
at io.netty.buffer.UnpooledHeapByteBuf.array(UnpooledHeapByteBuf.java:147)
at com.ltsllc.miranda.netty.ChannelOutboundMonitor.write(ChannelOutboundMonitor.java:44)
at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:827)
at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:752)
at com.ltsllc.miranda.netty.NullTerminatedOutboundFrame.write(NullTerminatedOutboundFrame.java:31)
at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:827)
at io.netty.channel.AbstractChannelHandlerContext$WriteTask.run(AbstractChannelHandlerContext.java:1136)
Code: Select all
public synchronized void sendHeartBeat() {
iterations++;
if (iterations % 100 == 0) {
System.gc();
}
if (channel == null || !channel.isOpen()) {
logger.error("null or closed channel");
return;
}
AlarmClock.getInstance().scheduleOnce(this, Alarms.HEART_BEAT,
Miranda.getProperties().getLongProperty(Miranda.PROPERTY_HEART_BEAT_INTERVAL));
if (Miranda.getProperties().getBooleanProperty(Miranda.PROPERTY_USE_HEARTBEATS)) {
if (System.currentTimeMillis() >
timeOfLastActivity + Miranda.getProperties().getLongProperty(Miranda.PROPERTY_HEART_BEAT_INTERVAL)) {
String message = Node.HEART_BEAT_START;
ByteBuf byteBuf = Unpooled.copiedBuffer(message.getBytes());
ChannelFuture future = channel.writeAndFlush(byteBuf);
long delay = Miranda.getProperties().getLongProperty(Miranda.PROPERTY_HEART_BEAT_TIMEOUT);
AlarmClock.getInstance().scheduleOnce(this, Alarms.HEART_BEAT_TIMEOUT, delay);
metTimeout = false;
try {
future.await();
if (!future.isSuccess()) {
logger.error("heartbeat start failed");
future.cause().printStackTrace();
}
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
Ich habe den Maven-Abhängigkeitsbaum verwendet, um sicherzustellen, dass ich netty 4.2.7.Final ziehe
Es gibt keine Netzwerkprobleme, da es sich um denselben Computer handelt: Es geht nicht über die Leitung aus.
Dies ist kein Codierungs-/Decodierungsfehler – die Nachricht ist in Ordnung gebildet.
Das ist kein Problem mit übermäßigen Schreibvorgängen, weil ich nicht viele Schreibvorgänge mache.
Das ist kein Problem, wenn der Kanal geschlossen oder inaktiv ist, weil ich das überprüft habe.
Ich weiß nicht, ob das daran liegt, dass die EventLoop beendet wurde. Wie kann man das überprüfen?
Was kann ich versuchen?
Mobile version