質問: null; sc_.getRequestDispatcher("/view/sales/salesAggregate.jsp").forward(request, response); } ### 試したこと CSVの出力件数は、わずか5行でも、100行程度でも、5秒程度の遅延が発生しています。 ### 補足情報(言語/FW/ツール等のバージョンなど) ・Windows10 ・jdk8 ・tomcat8 (サーブレットの設定は、インストール直後の状態です。)
回答: 手元の環境で再現できないため、推測による回答となりますが、、 `ps.close();`の**直前**に以下の1行を追加してみてはいかがでしょうか? ``` fo.getFD().sync(); ``` API リファレンスによると、`OutputStream#flush()`は(おそらく`close()`も) データを OS の書き込みバッファに引き渡すことを保証するだけで、デバイスそのものに書き込むことを保証するものではないようです。 > > このストリームの目的の転送先が、ベースとなるオペレーティング・システムによって提供される抽象化オブジェクト(ファイルなど)である場合、ストリームをフラッシュすることで、それまでにストリームに書き込まれたバイトがオペレーティング・システムに渡されて書き込まれることは保証されますが、ディスク・ドライブなどの物理デバイスに実際に書き込まれることは保証されません。 > > > 一方、`FileDescriptor#sync()`は、それを保証してくれるようです。 > > このFileDescriptorがファイル・システムのファイルのような物理記憶メディアを参照する場合、syncはこのFileDescriptorに関連付けられたバッファのメモリー内部での変更事項がすべて物理メディアに書き込まれるまでは復帰しません。 > > > ちなみに、以下も推測にすぎませんが、 この現象が発生する原因は Java または Tomcat のバージョン違いによるものではなく、 アプリケーションからのファイル出力が多すぎて(例えばTomcat のデバッグログなど) OS のI/O処理が追いついていない、ということも考えられるかと思います。