0

我有一个关于在我的程序中刷新使用的观察结果。我的测试代码将价值 200 MB 的数据 < Channel.write(buffer) > 泵送大约 30 分钟(每块 128 字节),每次调用之间有几毫秒的延迟。

一旦我得到回电 < SimpleChannelHandler.writeComplete > 我会记录 < System.currentTimeMillis + WriteCompletionEvent.getWrittenAmount >。完成对 <Channel.write(buffer) > 的所需调用的测试后,我观察到在最初的 5 分钟内,以大约 1.6 mbps 的速度刷新了 55 MB 的数据,然后在剩余的 25 分钟内以 0.8 Mbps 的速度刷新了 140 MB . 在过去的 25 分钟内,我观察到写入的数据块大小为 10 MB(每个回调到 SimpleChannelHandler.writeComplete )。

< SimpleChannelHandler.writeComplete > 的平均回调延迟在最初的 5 分钟运行中约为 2 毫秒,在最后 25 分钟的运行中达到 11500 毫秒。

请帮助我理解这种行为,并建议我可以在哪里进行调整以避免在最后 25 分钟的跑步中出现颠簸。

以下是有关我的设置 + 代码的一些信息:

我的客户端和服务器节点之间的连接是 1 GE,我已将 ClientBootstrap.setOption 中的 < sendBufferSize > 和 < receiveBufferSize > 设置为 < 16777216 >

我的通道管道中有一个 BufferedWriteHandler 实例 < pipeline.addFirst("bufferedWriter", new ConsolidatingAutoFlusher()); >,并在 <writeRequested> 中调用 <BufferedWriteHandler.flush(true)>

干杯,萨凯特。

4

1 回答 1

0

所以你在每个 writeRequested(..) 回调上调用 BufferdWriteHandler.flush(true) ?我不明白你为什么要这样做。如果您真的在每个 writeRequested 上刷新,那么根本不需要 BufferedWriteHandler。它只会以不好的方式影响性能。

于 2012-04-19T19:25:36.503 回答