Это пример чтения Netty с закрытого канала? - PullRequest
1 голос
/ 07 октября 2019

Я нагрузочно тестирую проект на основе Netty, ударяя по нему множеством одновременных GET запросов.

При большой нагрузке я получаю много примеров этого:

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 выдает это исключение?

Учитывая, что явидеть это только при большой нагрузке, означает ли это, что (например) мой цикл обработки событий слишком занят, чтобы фактически "отвечать на звонки", когда инструмент "нагрузочного тестирования" "звонит"? Если да, то почему он вообще пытается читать с канала?

1 Ответ

2 голосов
/ 08 октября 2019

Нет никакого способа не допустить, чтобы это произошло на практике, поскольку это просто говорит о том, что удаленный узел установил незаметно закрытое соединение. Вы должны просто проигнорировать исключение, если вы не заинтересованы, и демонтировать Channel.

...