POI Apache в Windows Server 2012 R2

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

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

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


person Rajeev    schedule 17.02.2017    source источник
comment
Apache POI — это Java программное обеспечение. Таким образом, он запускается не в Windows Box напрямую, а на виртуальной машине Java в среде выполнения Java. Поэтому я бы сравнил версии Java JRE между системами Windows и посмотрел на выполнение системные требования для Java.   -  person Axel Richter    schedule 17.02.2017
comment
Я провел сравнение, и виртуальные машины одинаковы, обе работают на Java 1.8. Нет проблем с запуском виртуальной машины Java, как я уже упоминал в своей проблеме, чтение файла excel всегда застревает на последнем листе.   -  person Rajeev    schedule 18.02.2017
comment
Затем следующее, что я хотел бы сделать, это создать наименьший возможный пример, который читает только *.xlsx, содержащий несколько листов, так же, как вы делаете это в своей текущей программе. Только без всей этой простой задачи. Затем я бы проверил это в обеих системах. Если его производительность отличается даже в самой маленькой форме, вы можете опубликовать код здесь и спросить, почему он отличается. В противном случае добавьте дополнительные вещи, которые вы делаете в своей текущей программе, и снова проверьте. Делайте это до тех пор, пока не возникнет разница в производительности. В большинстве случаев вы знаете, в чем причина. Если нет, вы можете опубликовать код   -  person Axel Richter    schedule 18.02.2017


Ответы (1)


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

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

person Rajeev    schedule 01.03.2017