作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
连接到第 3 方服务器时遇到 OutMemoryError,该服务器无法足够快地处理请求。
尝试NioClientSocketChannelFactory通过有界队列和丢弃策略(ThreadPoolExecutor.DiscardPolicy)传入执行程序服务,但仍然出现OutOfMemoryError。
我错过了什么?
谢谢
最佳答案
如果客户端 Netty channel 的写入缓冲区已满,并且服务器读取速度不够快,您将看到 OutOfMemoryError
在客户端。为了避免这种情况,你必须停止编写 if Channel.isWritable()
返回false
。您将收到通知 channelInterestOpsChanged
当状态为 Channel.writable' changes. Then, you can check again if
时发生事件Channel.isWritable() returns
true`并继续写作。
如果可以丢弃待处理的数据,我就不会调用 Channel.write()
如果Channel.isWritable()
返回false
.
您可以配置何时Channel.writable
属性随 NioSocketChannelConfig
中提供的水印属性而变化。另外,请查看使用此技术的“丢弃”示例。
关于Netty客户端有界队列丢弃策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8409763/
我是一名优秀的程序员,十分优秀!