2017-02-17 31 views
0

У нас есть набор служебных программ, которые читают файл .xlsx для некоторых входных данных и создают отчеты, для этой цели используется Apache POI. Файл Excel получил 8 листов со средним числом 50 строк и 20 столбцами данных. Все нормально работало в обычном окне Windows 7 (читайте разработчику машину). Чтение файла закончится через несколько секунд.Apache POI в Window Server 2012 R2

Недавно мы переместили эти задания в окно Windows Server 2012 R2, и мы заметили, что последний лист в файле excel занимает много времени, чтобы закончить чтение. Я дублировал последний лист, чтобы подтвердить, что это не проблема с данными и выполнение задания, второй последний лист (был последним в предыдущем исполнении) получил завершенное чтение за миллисекунды, а последний (дублированный лист) снова получил застрял в течение 15 минут. Мое лучшее предположение заключается в том, что это может быть связано с тем, что время, затраченное на закрытие файла, становится слишком высоким, но это просто предположение и никаких конкретных доказательств, подтверждающих это, также, если это так, я не уверен, почему так. Только разница между рабочими окнами Windows и нерабочими ящиками - это ОС, остальные конфигурации одинаковы. Я проанализировал кучу и свалку нитей, и проблем не обнаружено.

Есть ли какие-либо известные проблемы совместимости с полями POI и Windows Server? Или это связано с кодом? Мы используем реализацию POI-XSSF.

+1

'Apache POI' - это программное обеспечение' Java'. Поэтому он не запускается в «Windows Box» напрямую, а в виртуальной машине Java в среде выполнения Java. Поэтому я бы сравнил версии Java JRE между системами Windows и посмотрел на выполнение [системных требований для Java] (https://www.java.com/en/download/help/sysreq.xml). –

+0

Я сделал сравнение, и виртуальные машины такие же, как и на Java 1.8. Нет проблем при работе с виртуальной машиной Java, как я упоминал в своей проблеме, чтение файла Excel всегда застряло на последнем листе. – Rajeev

+1

Тогда следующее, что я сделал бы, это создать наименьший возможный пример, который только читает '* .xlsx', содержащий несколько листов так же, как вы делаете это в своей текущей программе. Только без всякой вещи вокруг этой простой задачи. Тогда я проверил бы это в обеих системах. Если производительность отличается даже в самой маленькой форме, вы можете опубликовать здесь код и спросить, почему он отличается. В противном случае добавьте дополнительный материал, который вы делаете в своей текущей программе, и повторите тест. Делайте это до тех пор, пока не произойдет различие в производительности. В большинстве случаев вы знаете, в чем причина. Если нет, вы можете опубликовать код –

ответ

0

Итак, у нас возникла проблема; проблема связана с самой виртуальной машиной, операция ввода-вывода диска всегда 100%, а чтение/запись файлов занимает много времени, поэтому программа застряла там. Однако мы не могли определить, почему диск ввода/вывода высок, попробовал некоторые блоги, но не работал, поэтому мы понизили ОС до сервера Windows 2008, и он работал хорошо.

Обратите внимание, что не имеет ничего общего с POI или чем-то еще, это, безусловно, проблема с VM/OS.