2017-02-17 13 views
0

いくつかの入力データに対して.xlsxファイルを読み込んでレポートを生成する一連のユーティリティプログラムがあります。この目的のためにApache POIが使用されています。 Excelファイルには平均50行20列のデータが8枚あります。すべての正常なWindows 7のボックス(開発者のマシンを読む)で正常に動作していた。ファイルの読み込みは数秒で完了します。Window Server 2012 R2のApache POI

最近、これらのジョブをWindows Server 2012 R2ボックスに移動し、Excelファイルの最後のシートには読み終えに多くの時間がかかります。私は最後のシートを複製して、これがデータの問題ではないことを確認し、ジョブを実行しました。最後の2枚目(前回実行時の最後のシート)がミリ秒単位で読み込まれ、最後のシート15分間放置する。私の最高の推測は、これは、ファイルを閉じる時間が長くなりすぎていることが原因である可能性があるということです。それは単に推測であり、それを証明する具体的な証拠でもありません。動作中のWindowsボックスと非動作ボックスの違いはOSだけであり、残りの設定はすべて似ています。私は、ヒープとスレッドのダンプを分析し、問題は見つかりませんでした。

POIおよびWindowsサーバーボックスに関する既知の互換性の問題はありますか?それとも、コードに関連するものですか? POI-XSSFの実装を使用しています。

+1

'Apache POI'は' Java'ソフトウェアです。したがって、「Windowsボックス」内ではなく、Java Runtime EnvironmentのJava仮想マシン内で直接実行されます。そこで、私はWindowsシステム間でJava JREのバージョンを比較し、[Javaのシステム要件](https://www.java.com/ja/download/help/sysreq.xml)を見ていきます。 –

+0

私は比較を行い、VMは同じで、どちらもJava 1.8で動作します。私の問題で言及したように、Java VMを実行する上で問題はありません。ファイルの読み込みが常に最後のシートに貼り付けられています。 – Rajeev

+1

次に、次に実行するのは、できるだけ小さな例を作成して '* .xlsx'現在のプログラムでこれをやっているのと同じ方法で複数のシートを作成します。この単純な仕事の周りには、すべてのものがなければ。それから私は両方のシステムでこれをテストします。最小のシェイピングでもパフォーマンスが異なる場合は、ここにコードを投稿してその違いを尋ねることができます。それ以外の場合は、現在のプログラムでやっていることを追加して、もう一度テストします。パフォーマンスの差が生じるまでこれを実行します。ほとんどの時間あなたはその理由を知っています。そうでない場合は、コードを投稿することができます –

答えて

0

最後に問題が発生しました。確認された問題はVM自体にあり、ディスクI/O操作は常に100%であり、ファイルの読み書きは完了するまでに多くの時間がかかり、プログラムがそこに滞留していました。しかし、なぜディスクI/Oが高いのかわかりませんでしたが、ブログをいくつか試してみましたが、私たちはOSをWindows 2008サーバーにダウングレードしていました。

POIなどとは関係ありませんが、確かにVM/OSの問題でした。

関連する問題