Windows Server 2012 R2 中的 Apache POI
Apache POI in Windows Server 2012 R2
我们有一组实用程序,可以读取一些输入数据的 .xlsx 文件并生成报告,Apache POI 用于此目的。 Excel 文件得到 8 sheet 秒,平均 50 行和 20 列数据。在 Windows 7 框(阅读开发人员机器)中一切正常。文件读取将在几秒钟内完成。
最近我们将这些作业移到了 Windows Server 2012 R2 中,我们注意到 excel 文件中的最后一个 sheet 需要很长时间才能完成阅读。我复制了最后一个 sheet 以确认这不是数据问题并执行了作业,倒数第二个 sheet(是上次执行中的最后一个)在毫秒内完成读取并且最后一个(重复 sheet)再次卡住了 15 分钟。我最好的猜测是,这可能是因为关闭文件所花费的时间太长了,但这只是一个猜测,没有具体的证据来证明这一点,如果是这样的话,我也不确定为什么会这样。工作 Windows 盒子和非工作盒子之间的唯一区别是 OS,其余所有配置都是相似的。我分析了堆和线程转储,没有发现任何问题。
POI 和 Windows 服务器盒是否存在任何已知的兼容性问题?或者它与代码有关?我们正在使用 POI-XSSF 实现。
好的,终于找到问题了;确定的问题与 VM 本身有关,磁盘 I/O 操作始终为 100%,文件 read/write 花费大量时间完成,这导致程序卡在那里。但是,我们无法确定磁盘 I/O 高的原因,尝试了一些博客但没有成功,因此我们将 OS 降级为 Windows 2008 服务器并且运行良好。
请注意,这与 POI 或任何东西无关,这肯定是一个 VM/OS 问题。
我们有一组实用程序,可以读取一些输入数据的 .xlsx 文件并生成报告,Apache POI 用于此目的。 Excel 文件得到 8 sheet 秒,平均 50 行和 20 列数据。在 Windows 7 框(阅读开发人员机器)中一切正常。文件读取将在几秒钟内完成。
最近我们将这些作业移到了 Windows Server 2012 R2 中,我们注意到 excel 文件中的最后一个 sheet 需要很长时间才能完成阅读。我复制了最后一个 sheet 以确认这不是数据问题并执行了作业,倒数第二个 sheet(是上次执行中的最后一个)在毫秒内完成读取并且最后一个(重复 sheet)再次卡住了 15 分钟。我最好的猜测是,这可能是因为关闭文件所花费的时间太长了,但这只是一个猜测,没有具体的证据来证明这一点,如果是这样的话,我也不确定为什么会这样。工作 Windows 盒子和非工作盒子之间的唯一区别是 OS,其余所有配置都是相似的。我分析了堆和线程转储,没有发现任何问题。
POI 和 Windows 服务器盒是否存在任何已知的兼容性问题?或者它与代码有关?我们正在使用 POI-XSSF 实现。
好的,终于找到问题了;确定的问题与 VM 本身有关,磁盘 I/O 操作始终为 100%,文件 read/write 花费大量时间完成,这导致程序卡在那里。但是,我们无法确定磁盘 I/O 高的原因,尝试了一些博客但没有成功,因此我们将 OS 降级为 Windows 2008 服务器并且运行良好。
请注意,这与 POI 或任何东西无关,这肯定是一个 VM/OS 问题。