2012-04-19 93 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