2017-02-17 57 views
0

我们有一组实用程序,它为某些输入数据读取.xlsx文件并生成报告,Apache POI用于此目的。 Excel文件得到了8张平均50行和20列数据。一切正常工作正常的Windows 7框(阅读开发机器)。文件阅读将在几秒钟内完成。Window Server 2012 R2中的Apache POI

最近我们将这些作业移到了Windows Server 2012 R2框中,我们注意到excel文件中的最后一张需要很多时间才能完成阅读。我复制了最后一张纸以确认这不是数据问题并执行了该作业,最后一张纸(是上一次执行中的最后一张)以毫秒为单位完成读取,最后一张(复印的纸张)再次得到坚持了15分钟。我最好的猜测是,这可能是因为关闭文件的时间过长,但这只是一个猜测,没有具体的证据证明,如果是这种情况,我不知道为什么。操作系统与Windows操作系统的区别仅在于操作系统,其余的所有配置都是相似的。我分析了堆和线程转储,没有发现问题。

POI和Windows服务器盒是否存在任何已知的兼容性问题?或者它与代码有关?我们正在使用POI-XSSF实现。

+1

'Apache POI'是'Java'软件。因此它不直接在“Windows Box”中运行,而是在Java运行时环境中的Java虚拟机中运行。因此,我会比较Windows系统之间的Java JRE版本,并查看实现[Java的系统要求](https://www.java.com/en/download/help/sysreq.xml)。 –

+0

我已经完成了比较,并且这些VM都是相同的,都在Java 1.8上运行。在运行Java虚拟机时没有问题,正如我在我的问题中提到的那样,excel文件读取始终停留在最后一张纸上 – Rajeev

+1

接下来我要做的是创建最小可能的示例,该示例只读取包含“* .xlsx”的多张工作表与您在当前程序中执行此操作的方式相同。只有没有围绕这个简单的任务的整个东西。然后我会在两个系统中测试它。如果它的性能与其最小的形状不同,那么你可以在这里发布代码并询问它为什么不同。否则,请在当前程序中追加更多内容并再次测试。做到这一点,直到发生性能差异。大多数时候你知道原因是什么。如果没有,您可以发布代码 –

回答

0

好的,最后我们得到了问题;发现的问题与虚拟机本身有关,磁盘I/O操作始终是100%,文件读/写需要很长时间才能完成,这导致程序停留在那里。然而,我们无法确定磁盘I/O为什么高,尝试了一些博客,但没有工作,因此我们将操作系统降级到Windows 2008服务器,并且运行良好。

请注意,这与POI或任何事情无关,这当然是VM/OS问题。

相关问题