ข้อผิดพลาด Java Heap ใน Talend

ฉันกำลังพยายามอ่านไฟล์ Excel ขนาด 30-60 MB ใน 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 GB และขนาด xmx สูงสุด 6 GB ฉันลองใช้ดิสก์เพื่อเก็บข้อมูลชั่วคราวด้วย จะแก้ไขปัญหานี้อย่างไร??


person Sangeeta Rawat    schedule 23.10.2015    source แหล่งที่มา
comment
เมื่อมองแวบแรก การมีพื้นที่ฮีป 1GB อาจดูเหมือนว่าเพียงพอสำหรับไฟล์ Excel ขนาด 60MB อย่างไรก็ตาม ฉันสงสัยว่าขนาดในหน่วยความจำของไฟล์ Excel อาจใหญ่กว่าขนาดบนดิสก์อย่างมาก   -  person Tim Biegeleisen    schedule 23.10.2015
comment
ลองตรวจสอบโค้ดของคุณ ดูเหมือนว่าคุณจะมีหน่วยความจำรั่วไหล   -  person Dmitry Malinovsky    schedule 23.10.2015


คำตอบ (2)


มีปัญหาเดียวกันกับ Apache POI เนื่องจาก POI มีหน่วยความจำขนาดใหญ่ ตอนนี้คุณสามารถลองทำงานบางอย่างเช่นประมวลผลไฟล์ของคุณด้วยส่วนเล็กๆ หรือลองดูที่ นี่ และทำการ "เพิ่มประสิทธิภาพ" บางอย่าง

นอกจากนี้ โปรดดู คำถามที่พบบ่อย ของ Apache POI ในจุดที่ 14 เพื่อรับคำแนะนำ

person edasssus    schedule 23.10.2015

องค์ประกอบ Talen เริ่มต้นใช้หน่วยความจำมากกว่าที่จำเป็น ฉันเชื่อว่าเป็นเพราะไฟล์ xlsx ขนาด 60MB นั้นไม่มีการบีบอัดในหน่วยความจำ ทั้งหมด แม้ว่าคุณจะอ่านแค่ 1 แถวจาก 1 แท็บก็ตาม

เพื่อเอาชนะข้อจำกัดนี้ คุณสามารถลองเพิ่มหน่วยความจำให้มากขึ้นเรื่อยๆ หรือมองหาวิธีอื่น ฉันมักจะใช้ส่วนประกอบ tFileExcel จาก Jan Lolling คุณสามารถรับสิ่งเหล่านี้ได้จาก ตลาดซื้อขาย

person Balazs Gunics    schedule 25.10.2015