如果Netty通道为可写,则数据将在哪里排队返回false

时间:2018-12-18 00:54:15

标签: java out-of-memory netty

从Netty api中显示,如果isWritable返回false,则请求将排队。我能知道请求将在哪里排队吗?在哪种情况下,队列可能已满并导致OOM问题?

以下是isWritable()的文档

仅当I / O线程将立即执行请求的写操作时,才返回true。当此方法返回false时发出的所有写请求都将排队,直到I / O线程准备好处理排队的写请求为止。

https://netty.io/4.1/api/io/netty/channel/Channel.html#isWritable--

1 个答案:

答案 0 :(得分:0)

它将在由netty维护的内部缓冲区中排队。为避免系统进入OOM状态,您将必须覆盖channelWritabilityChanged的方法ChannelInboundHandler并进行反压处理。

在这里,您可以使用autoread的{​​{1}}配置来减慢入站数据的读取,并按照here的说明手动读取请求。或者,如果您在其他线程上编写,则可能需要阻止该线程。