连接到第三方服务器的OutMemoryError,它无法足够快地处理请求。
尝试使用有界队列和丢弃策略(ThreadPoolExecutor.DiscardPolicy)传递NioClientSocketChannelFactory来传递执行程序服务,但仍然得到OutOfMemoryError。
我错过了什么?
由于
答案 0 :(得分:9)
如果您的客户端Netty频道的写缓冲区已满,且服务器读取速度不够快,您将在客户端看到OutOfMemoryError
。为避免这种情况,如果Channel.isWritable()
返回false
,则必须停止撰写。当状态为channelInterestOpsChanged
Channel.isWritable()Channel.writable' changes. Then, you can check again if
为真时,您会收到returns
事件通知,并继续撰写。
如果可以放弃待处理的数据,如果Channel.write()
返回Channel.isWritable()
,我就不会致电false
。
您可以使用Channel.writable
中提供的水印属性配置NioSocketChannelConfig
属性更改的时间。另外,请查看使用此技术的'discard'示例。