dedoc icon indicating copy to clipboard operation
dedoc copied to clipboard

[Bug] java.lang.OutOfMemoryError: Java heap space при парсинге документов

Open psydok opened this issue 9 months ago • 3 comments

Проблема, озвученная в https://github.com/ispras/dedoc/issues/489, полностью актуальна для версии 2.3 и 2.3.2 (докер образ). Полностью воспроизводится с тем же файлом из прошлого ишью.

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
        at org.apache.fontbox.cmap.CMap.readCode(CMap.java:165)
        at org.apache.pdfbox.pdmodel.font.PDType0Font.readCode(PDType0Font.java:553)
        at org.apache.pdfbox.contentstream.PDFStreamEngine.showText(PDFStreamEngine.java:690)
        at org.apache.pdfbox.contentstream.PDFStreamEngine.showTextStrings(PDFStreamEngine.java:633)
        at org.apache.pdfbox.contentstream.operator.text.ShowTextAdjusted.process(ShowTextAdjusted.java:53)
        at org.apache.pdfbox.contentstream.PDFStreamEngine.processOperator(PDFStreamEngine.java:849)
        at org.apache.pdfbox.contentstream.PDFStreamEngine.processStreamOperators(PDFStreamEngine.java:495)
        at org.apache.pdfbox.contentstream.PDFStreamEngine.processStream(PDFStreamEngine.java:469)
        at org.apache.pdfbox.contentstream.PDFStreamEngine.processPage(PDFStreamEngine.java:142)
        at org.apache.pdfbox.text.LegacyPDFStreamEngine.processPage(LegacyPDFStreamEngine.java:146)
        at org.apache.pdfbox.text.PDFMarkedContentExtractor.processPage(PDFMarkedContentExtractor.java:41)
        at model.Document.parseTags(Document.java:317)
        at model.Document.load(Document.java:82)
        at DedocTableExtractor.extract(DedocTableExtractor.java:148)
        at DedocTableExtractor.run(DedocTableExtractor.java:118)
        at DedocTableExtractor.main(DedocTableExtractor.java:72)

psydok avatar Mar 26 '25 13:03 psydok

Скорее всего это связано с объемом оперативной памяти компьютера, на котором проводилось тестирование. На компьютере с размером ОП 8 Гб ошибка воспроизводится, на компьютере с размером ОП 64 Гб все отрабатывает без ошибок. Скорее всего уменьшить размер требуемой ОП не получится, так как файл большой, и ресурсов на его обработку требуется много.

@sunveil есть ли возможность уменьшить размер требуемой ОП компьютера при парсинге больших PDF?

NastyBoget avatar Mar 27 '25 08:03 NastyBoget

Я заметил, что если отправлять большой файл, но просить распарсить только 2 страницы, то OOM не падает. Возможно есть какая-нибудь фича, чтобы включить парсинг файлов от 20-30мб чанками (по странично) и в конце склеивать результат будто все целиком за раз обработалось?
После тестирования файла в 23мб, я хотел бы попробовать 80мб и 100мб.

В документации не нашел, но может планируется добавить?

psydok avatar Mar 27 '25 09:03 psydok

Фичи такой нет, но идея хорошая. Добавить можно, но скорее всего это будет нескоро

NastyBoget avatar Mar 27 '25 09:03 NastyBoget