我在程序中有关于刷新使用的观察。我的测试代码泵数据< Channel.write(缓冲区)>价值200 MB(每个128字节的块)大约30分钟,每次这样的呼叫之间有几毫秒的延迟。
一旦我回电话给< SimpleChannelHandler.writeComplete>我记录< System.currentTimeMillis + WriteCompletionEvent.getWrittenAmount>。一旦我的测试完成所需的调用< Channel.write(buffer)>,我观察到在最初的5分钟内,55 MB的数据被刷新@大约1.6 mbps,然后在剩余的25分钟内刷新140 MB @ 0.8 Mbps。在过去的25分钟里,我发现写入的数据块大小为10 MB(每次回调到SimpleChannelHandler.writeComplete)。
回调的平均延迟时间<&lt; SimpleChannelHandler.writeComplete&gt;运行的最初5分钟约为2毫秒,运行的最后25分钟会碰到11500毫秒。
请帮助我理解这种行为,并建议我可以在哪里调整以避免在最后25分钟的运行过程中发生碰撞。
以下是有关我的设置+代码的一些信息:
我的客户端和服务器节点之间的连接是1 GE,我设置了&lt; sendBufferSize&gt;和&lt; receiveBufferSize&gt;在ClientBootstrap.setOption中&lt; 16777216&gt;
我的频道管道中有一个BufferedWriteHandler实例&lt; pipeline.addFirst(“bufferedWriter”,新的ConsolidatingAutoFlusher()); &gt;,并且在&lt; writeRequested&gt;我调用&lt; BufferedWriteHandler.flush(true)&gt;
干杯, 萨基特。
答案 0 :(得分:0)
所以你在每个writeRequested(..)回调上调用BufferdWriteHandler.flush(true)?我不明白为什么你会想要todo这个。如果你真的在每个writeRequested上刷新,那么就根本不需要BufferedWriteHandler。它只会以不好的方式影响效果。