Kesalahan Tumpukan Java di Talend

Saya mencoba membaca file excel berukuran 30-60 MB di talend, tetapi muncul kesalahan berikut

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)

Saya telah mencoba meningkatkan ukuran xms hingga 1 GB dan ukuran xmx hingga 6 GB. saya juga mencoba menggunakan disk untuk menyimpan data sementara. Bagaimana cara mengatasi masalah ini??


person Sangeeta Rawat    schedule 23.10.2015    source sumber
comment
Pada pandangan pertama, memiliki ruang heap 1GB mungkin tampak cukup untuk file Excel 60MB. Namun, saya menduga ukuran memori file Excel bisa jauh lebih besar daripada ukurannya di disk.   -  person Tim Biegeleisen    schedule 23.10.2015
comment
Pertimbangkan untuk meninjau kode Anda, sepertinya Anda mengalami kebocoran memori.   -  person Dmitry Malinovsky    schedule 23.10.2015


Jawaban (2)


Punya masalah yang sama dengan Apache POI. Itu karena POI memiliki jejak memori yang besar. Sekarang Anda dapat mencoba melakukan beberapa pekerjaan seperti memproses file Anda dengan bagian yang lebih kecil atau mencoba melihat ini dan lakukan beberapa "optimasi".

Lihat juga FAQ Apache POI ke poin 14. untuk mendapatkan beberapa rekomendasi.

person edasssus    schedule 23.10.2015

Komponen bakat default menggunakan lebih banyak memori daripada yang dibutuhkan. Saya yakin ini karena file xlsx berukuran 60MB tersebut sepenuhnya tidak terkompresi di memori. Meskipun Anda hanya membaca 1 baris dari 1 tab.

Untuk mengatasi keterbatasan ini Anda dapat mencoba menambah memori lebih banyak atau mencari cara lain. Saya biasanya menggunakan komponen tFileExcel dari Jan Lolling. Anda dapat memperolehnya dari pasar bakat.

person Balazs Gunics    schedule 25.10.2015