Ошибка кучи Java в Talend

Я пытаюсь прочитать 30-60 МБ файла excel в talend, но выдает следующую ошибку

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.lang.AbstractStringBuilder.<init>(Unknown Source)
at java.lang.StringBuffer.<init>(Unknown Source)
at org.apache.xmlbeans.impl.store.Locale$ScrubBuffer.<init>(Locale.java:1804)
at org.apache.xmlbeans.impl.store.Locale.getScrubBuffer(Locale.java:1904)
at org.apache.xmlbeans.impl.store.Xobj.getValueAsString(Xobj.java:1205)
at org.apache.xmlbeans.impl.store.Xobj.fetch_text(Xobj.java:1796)
at org.apache.xmlbeans.impl.values.XmlObjectBase.get_wscanon_text(XmlObjectBase.java:1332)
at org.apache.xmlbeans.impl.values.XmlObjectBase.check_dated(XmlObjectBase.java:1269)
at org.apache.xmlbeans.impl.values.JavaLongHolder.longValue(JavaLongHolder.java:53)
at org.apache.xmlbeans.impl.values.XmlObjectBase.getLongValue(XmlObjectBase.java:1502)
at org.openxmlformats.schemas.spreadsheetml.x2006.main.impl.CTRowImpl.getR(Unknown Source)
at org.apache.poi.xssf.usermodel.XSSFRow.getRowNum(XSSFRow.java:322)
at org.apache.poi.xssf.usermodel.XSSFSheet.initRows(XSSFSheet.java:229)
[statistics] disconnected
[statistics] disconnected
[statistics] disconnected
[statistics] disconnected
[statistics] disconnected
at org.apache.poi.xssf.usermodel.XSSFSheet.read(XSSFSheet.java:193)
at    org.apache.poi.xssf.usermodel.XSSFSheet.onDocumentRead(XSSFSheet.java:180)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.onDocumentRead(XSSFWorkbook.java:300)
at org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:159)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:221)
at de.cimt.talendcomp.tfileexcelpoi.SpreadsheetFile.initializeWorkbook(SpreadsheetFile.java:281)
at cdif_validation.validation_partsourcingtab3_0_1.Validation_PartSourcingTab3.tFileExcelWorkbookOpen_1Process(Validation_PartSourcingTab3.java:774)
at cdif_validation.validation_partsourcingtab3_0_1.Validation_PartSourcingTab3.tFileList_1Process(Validation_PartSourcingTab3.java:696)
at cdif_validation.validation_partsourcingtab3_0_1.Validation_PartSourcingTab3.runJobInTOS(Validation_PartSourcingTab3.java:8268)
at cdif_validation.validation_partsourcingtab3_0_1.Validation_PartSourcingTab3.runJob(Validation_PartSourcingTab3.java:8110)
at cdif_validation.cdif_validation_0_1.CDIF_Validation.tRunJob_3Process(CDIF_Validation.java:1175)
at cdif_validation.cdif_validation_0_1.CDIF_Validation.tForeach_1Process(CDIF_Validation.java:983)
at cdif_validation.cdif_validation_0_1.CDIF_Validation.tFileList_1Process(CDIF_Validation.java:820)
at cdif_validation.cdif_validation_0_1.CDIF_Validation.tJava_1Process(CDIF_Validation.java:634)
at cdif_validation.cdif_validation_0_1.CDIF_Validation.tPrejob_1Process(CDIF_Validation.java:529)
at cdif_validation.cdif_validation_0_1.CDIF_Validation.runJobInTOS(CDIF_Validation.java:1885)
at cdif_validation.cdif_validation_0_1.CDIF_Validation.main(CDIF_Validation.java:1722)

Я попытался увеличить размер xms до 1 ГБ и размер xmx до 6 ГБ. также я пытался использовать диск для хранения временных данных. Как решить эту проблему??


person Sangeeta Rawat    schedule 23.10.2015    source источник
comment
На первый взгляд может показаться, что 1 ГБ пространства в куче вполне достаточно для файла Excel размером 60 МБ. Однако я подозреваю, что размер файла Excel в памяти может быть значительно больше, чем его размер на диске.   -  person Tim Biegeleisen    schedule 23.10.2015
comment
Подумайте о том, чтобы просмотреть свой код, похоже, у вас есть какая-то утечка памяти.   -  person Dmitry Malinovsky    schedule 23.10.2015


Ответы (2)


Была такая же проблема с Apache POI. Это потому, что POI имеет большой объем памяти. Теперь вы можете попытаться выполнить некоторую работу, например, обработать файл меньшими частями или попытаться просмотреть это и сделать некоторую "оптимизацию".

Также см. Apache POI FAQ к пункту 14, чтобы получить некоторые рекомендации.

person edasssus    schedule 23.10.2015

Компоненты Talend по умолчанию используют намного больше памяти, чем требуется. Я полагаю, это связано с тем, что файл xlsx размером 60 МБ полностью не сжат в памяти. Даже если вы просто читаете 1 строку с 1 вкладки.

Чтобы преодолеть это ограничение, вы можете пытаться добавлять все больше и больше памяти или искать другой способ. Обычно я использую компоненты tFileExcel от Яна Лоллинга. Вы можете получить их из биржа талантов.

person Balazs Gunics    schedule 25.10.2015