我正在通过同时执行大量GET
个并发请求来对基于Netty的项目进行负载测试。
在繁重的工作中,我得到了很多这样的例子:
WARNING: An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.
java.io.IOException: Connection reset by peer
at java.base/sun.nio.ch.FileDispatcherImpl.read0(Native Method)
at java.base/sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39)
at java.base/sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:276)
at java.base/sun.nio.ch.IOUtil.read(IOUtil.java:233)
at java.base/sun.nio.ch.IOUtil.read(IOUtil.java:223)
at java.base/sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:358)
at io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:247)
at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1147)
at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:347)
[snip]
我知道错误消息告诉我管道的最后一个元素未处理此IOException
。我首先想防止错误发生。
我可以正确地推断出,这意味着出于任何原因,Netty都试图从封闭的频道读取吗?这是否意味着我的负载测试工具已经关闭了套接字,在该套接字上已编写了诸如请求标头之类的内容,而Netty试图从中读取内容,因此Netty抛出了此异常?
鉴于我只能在高负载下看到此消息,这是否意味着(例如)我的事件循环太忙而无法在负载测试工具“调用”时实际“接听电话”?如果是这样,为什么它完全尝试从该通道读取?
答案 0 :(得分:2)
实际上不可能没有发生这种情况,因为它只是告诉您远程对等对象进行了非正常关闭的连接。如果您不感兴趣,则应该忽略该异常,并拆除Channel
。