#apache-camel #out-of-memory #freemarker #apache-karaf #blueprint-osgi
#apache-camel #нехватка памяти #freemarker #апачи-караф #план -osgi
Вопрос:
в настоящее время я сталкиваюсь с проблемой нехватки памяти, когда пытаюсь сгенерировать большой файл, используя freemarker размером> 300 МБ. (это хорошо работает для небольших файлов)
<to uri="freemarker:file:{{karaf.home}}/etc/fileGenerator.ftl" />
есть ли способ избежать этой проблемы?
моя конфигурация: Apche karaf 4.2.6: 4 ГБ памяти
Caused by: java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:3332) ~[?:?]
at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:124) ~[?:?]
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:596) ~[?:?]
at java.lang.StringBuffer.append(StringBuffer.java:367) ~[?:?]
at java.io.StringWriter.write(StringWriter.java:94) ~[?:?]
at java.io.Writer.write(Writer.java:127) ~[?:?]
at freemarker.core.TextBlock.accept(TextBlock.java:67) ~[?:?]
at freemarker.core.Environment.visit(Environment.java:330) ~[?:?]
at freemarker.core.Environment.visit(Environment.java:372) ~[?:?]
at freemarker.core.IteratorBlock$IterationContext.executedNestedContentForCollOrSeqListing(IteratorBlock.java:317) ~[?:?]
at freemarker.core.IteratorBlock$IterationContext.executeNestedContent(IteratorBlock.java:271) ~[?:?]
at freemarker.core.IteratorBlock$IterationContext.accept(IteratorBlock.java:242) ~[?:?]
at freemarker.core.Environment.visitIteratorBlock(Environment.java:642) ~[?:?]
at freemarker.core.IteratorBlock.acceptWithResult(IteratorBlock.java:107) ~[?:?]
at freemarker.core.IteratorBlock.accept(IteratorBlock.java:93) ~[?:?]
at freemarker.core.Environment.visit(Environment.java:330) ~[?:?]
at freemarker.core.Environment.visit(Environment.java:336) ~[?:?]
at freemarker.core.Environment.visit(Environment.java:372) ~[?:?]
at freemarker.core.IteratorBlock$IterationContext.executedNestedContentForCollOrSeqListing(IteratorBlock.java:317) ~[?:?]
at freemarker.core.IteratorBlock$IterationContext.executeNestedContent(IteratorBlock.java:271) ~[?:?]
at freemarker.core.IteratorBlock$IterationContext.accept(IteratorBlock.java:242) ~[?:?]
at freemarker.core.Environment.visitIteratorBlock(Environment.java:642) ~[?:?]
at freemarker.core.IteratorBlock.acceptWithResult(IteratorBlock.java:107) ~[?:?]
at freemarker.core.IteratorBlock.accept(IteratorBlock.java:93) ~[?:?]
at freemarker.core.Environment.visit(Environment.java:330) ~[?:?]
at freemarker.core.Environment.visit(Environment.java:372) ~[?:?]
at freemarker.core.IteratorBlock$IterationContext.executedNestedContentForCollOrSeqListing(IteratorBlock.java:317) ~[?:?]
at freemarker.core.IteratorBlock$IterationContext.executeNestedContent(IteratorBlock.java:271) ~[?:?]
at freemarker.core.IteratorBlock$IterationContext.accept(IteratorBlock.java:242) ~[?:?]
at freemarker.core.Environment.visitIteratorBlock(Environment.java:642) ~[?:?]
at freemarker.core.IteratorBlock.acceptWithResult(IteratorBlock.java:107) ~[?:?]
at freemarker.core.IteratorBlock.accept(IteratorBlock.java:93) ~[?:?]
Комментарии:
1. Типичная ошибка, которую совершают люди, — это передача
StringWriter
в FreeMarker, а затем сохранение результатаString
в aFile
, вместо прямой передачи aFileWriter
в FreeMarker. Но я не знаю, применимо ли это здесь. Например, что вызывает FreeMarker?2. Не могли бы вы опубликовать точную трассировку стека исключений из журнала?
3. @MattPavlovich я добавил исключение к своему вопросу
4. @ddekany я не понял вашего вопроса: (
5. Из трассировки стека проблема в том, что я подозревал в своем комментарии. То есть результат записывается в
StringWriter
. Я не уверен, что это был Camel, который передал этоWriter
FreeMarker. Пожалуйста, проверьте. Это должен быть вызовTemplate.process
илиEnvironment.process
, и он должен быть дальше в трассировке стека.