2012-04-19 8 views
0

私のプログラム内でのフラッシュ使用に関する所見があります。私のテストコードは、それぞれの呼び出しの間に数ミリ秒の遅延を伴って、約30分、データ< Channel.write(バッファ)> 200 MB(各128バイトのチャンク)を送ります。BufferedWriteHandler.flushでの観測

私が<にコールバックしたら、SimpleChannelHandler.writeComplete>私は< System.currentTimeMillis + WriteCompletionEvent.getWrittenAmount>を記録します。私のテストが< Channel.write(buffer)>への希望の呼び出しで行われると、最初の5分間に55MBのデータが約1.6mbpsでフラッシュされ、残りの25分間は140MB @ 0.8Mbps 。最後の25分で、書かれたデータのチャンクが(SimpleChannelHandler.writeCompleteへのコールバックごとに)10MBの調整であることがわかりました。

<へのコールバックの平均遅延SimpleChannelHandler.writeComplete>は、最初の5分間の実行では約2ミリ秒で、最後の25分間の実行では11500ミリ秒に達します。

この動作を理解して助けてください。最後の25分間の実行中にバンプを避けるためにチューニングできる場所を教えてください。ここで

は私のセットアップ+コードに関するいくつかの情報です:

接続私のクライアントとサーバノード間で1 GEと私は思い< sendBufferSizeを設定している>と< receiveBufferSize> ClientBootstrap.setOptionで< 16777216として>

私はチャンネルパイプラインにBufferedWriteHandlerのインスタンスを持っています< pipeline.addFirst( "bufferedWriter"、new ConsolidatingAutoFlusher()); >、およびwriteRequested <に> Iが起動< BufferedWriteHandler.flush>(真)

乾杯、 サケット。

答えて

0

writeRequested(..)コールバックごとにBufferdWriteHandler.flush(true)を呼び出しますか?私はなぜあなたがこれをやりたいのか分からない。あなたが本当にwriteRequestedごとにフラッシュするなら、BufferedWriteHandlerをまったく持っている必要はありません。それは悪い方法で単にperformaneに影響を与えます。

+0

私はを試しましたが、同様の観察です。 –

+0

私の質問はなぜBufferedWriteHandlerが必要なのですか? –

+0

私はを調整してデーモンを停止させました。ありがとう! –