2012-04-19 90 views
0

我有一个关于我的程序中的flush用法的观察。我的测试代码将数据泵送数据< Channel.write(buffer)>值大约200 MB(以128字节为单位),持续大约30分钟,每次调用之间有几个ms的延迟。用BufferedWriteHandler.flush观察

一旦我回拨到< 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)。

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

请帮助我理解这种行为,并建议我可以调整的位置以避免在运行的最后25分钟内发生颠簸。

这里是我的设置+代码的一些信息:

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

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

干杯, Saket。

回答

0

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

+0

我试着用但类似的观察。 – 2012-04-19 20:45:03

+0

我的问题更多的是你为什么需要BufferedWriteHandler? – 2012-04-20 08:14:58

+0

我通过调整来确定守护进程。谢谢! – 2012-04-20 20:03:49