从Netty API中,它表明如果istrable return false,请求将排队。我能知道该请求将在哪里排队吗?在哪种情况下,队列可能已满并引起OOM问题?
以下是iStrable()
的文档当且仅当I/O线程立即执行请求的写操作时,才返回true。当此方法返回false时,提出的任何写请求都排队排队,直到I/O线程准备好处理排队的写请求。
https://netty.io/4.1/api/io/netty/channel/channel.html#iswritable--
它将在Netty维护的内部缓冲区中排队。为了避免系统运行,您必须覆盖ChannelInboundHandler
的channelWritabilityChanged
方法并进行背压处理。
在这里,您可以使用channel
的autoread
配置来减慢入站数据的读数,并如下所述手动读取请求。或者,如果您在其他线程上写作,则可能需要阻止该线程。