У меня возникли проблемы с разбором файлов .xlsx
с Apache POI - я получаю java.lang.OutOfMemoryError: Java heap space
в моем развернутом приложении. Я обрабатываю файлы только под 5 Мбайт и около 70 000 строк, поэтому мое подозрение от чтения других вопросов заключается в том, что что-то не так.
Как было предложено в этом комментарии, я решил запустить SSPerformanceTest.java
с предлагаемыми переменными, чтобы посмотреть, нет ли чего-то неправильного в моем коде или настройке. Результаты показывают значительное различие между HSSF (.xls
) и XSSF (.xlsx
):
1) HSSF 50000 50 1: Истек 1 секунда
2) SXSSF 50000 50 1: Истекшее 5 секунд
3) XSSF 50000 50 1: Истекшее 15 секунд
FAQ специально говорит:
Если вы не можете запустить это с 50 000 строк и 50 столбцов во всех HSSF, XSSF и SXSSF менее чем за 3 секунды (в идеале намного меньше!), проблема связана с вашей средой.
Далее, он говорит, чтобы выполнить XLS2CSV.java
, который я сделал. Подача в файл XSSF, сгенерированный выше (с 50000 строк и 50 столбцов), занимает около 15 секунд - столько же, сколько требуется для записи файла.
Что-то не так с моей средой, и если да, то как я буду исследовать дальше?
Статистика из VisualVM показывает, что куча использовала съемку до 1,2 ГБ во время обработки. Наверняка, это слишком высоко, учитывая, что дополнительный концерт на вершине кучи по сравнению с началом обработки начался?
Примечание. Указанное выше исключение кучного пространства происходит только в процессе производства (в Google App Engine) и только для файлов .xlsx
, однако тесты, упомянутые в этом вопросе, были запущены на моей машине разработки с помощью -Xmx2g
. Я надеюсь, что если я смогу исправить проблему в моей настройке разработки, она будет использовать меньше памяти при развертывании.
Трассировка стека из движка приложения:
Вызвано: java.lang.OutOfMemoryError: пространство кучи Java at org.apache.xmlbeans.impl.store.Cur.createElementXobj(Cur.java:260) at org.apache.xmlbeans.impl.store.Cur $CurLoadContext.startElement(Cur.java:2997) at org.apache.xmlbeans.impl.store.Locale $SaxHandler.startElement(Locale.java:3211) at org.apache.xmlbeans.impl.piccolo.xml.Piccolo.reportStartTag(Piccolo.java:1082) на org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseAttributesNS(PiccoloLexer.java:1802) на org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseOpenTagNS(PiccoloLexer.java:1521)