【问题标题】:Apache POI in Windows Server 2012 R2Windows Server 2012 R2 中的 Apache POI
【发布时间】:2018-06-28 20:53:49
【问题描述】:

我们有一组实用程序可以读取 .xlsx 文件以获取一些输入数据并生成报告,Apache POI 用于此目的。 Excel 文件有 8 张,平均 50 行和 20 列数据。在普通的 Windows 7 机器中一切正常(阅读开发人员机器)。文件读取将在几秒钟内完成。

最近我们将这些作业移到了 Windows Server 2012 R2 机器上,我们注意到 excel 文件中的最后一张表需要很长时间才能完成读取。我已经复制了最后一张纸以确认这不是数据问题并执行了作业,最后一张纸(是上一次执行中的最后一张)以毫秒为单位完成读取,最后一张(复制的纸)再次获得卡住了15分钟。我在这里最好的猜测是,这可能是因为关闭文件所花费的时间太长了,但这只是一个猜测,没有具体的证据可以证明这一点,如果是这样的话,我也不确定为什么会这样。工作 Windows 盒子和非工作盒子之间的唯一区别是操作系统,其余所有配置都相似。我分析了堆和线程转储,没有发现问题。

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

【问题讨论】:

  • Apache POIJava 软件。因此它不是直接在“Windows Box”中运行,而是在 Java 运行时环境中的 Java 虚拟机中运行。因此,我将比较 Windows 系统之间的 Java JRE 版本,并看看实现system requirements for Java
  • 我做了比较,虚拟机是一样的,都在 Java 1.8 上运行。运行Java VM没有问题,正如我在问题中提到的那样,excel文件读取总是卡在最后一张
  • 接下来我要做的是创建一个最小的示例,它只读取包含多个工作表的*.xlsx,就像您在当前程序中执行此操作一样。只有没有围绕这个简单任务的全部内容。然后我会在两个系统中进行测试。如果它的性能即使在最小的形状上也不同,那么您可以在此处发布代码并询问它为什么不同。否则,在当前程序中附加您正在执行的更多内容并再次测试。这样做直到出现性能差异。大多数时候你知道原因是什么。如果没有,您可以发布代码

标签: apache-poi windows-server-2012 xssf


【解决方案1】:

好的,我们终于解决了问题;确定的问题与 VM 本身有关,磁盘 I/O 操作始终是 100% 并且文件读/写需要很长时间才能完成,这导致程序卡在那里。但是我们无法确定磁盘 I/O 高的原因,尝试了一些博客但没有成功,因此我们将操作系统降级到 Windows 2008 服务器并且它运行良好。

请注意,这与 POI 或任何东西无关,这肯定是 VM/OS 问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    • 1970-01-01
    相关资源
    最近更新 更多