High heap retention in stdout LoggingWriter's StringBuilder buffer
Issue
- We experienced an OutOfMemoryError that was generated from something writing messages through System.out:
Caused by: java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2894) [rt.jar:1.6.0_41]
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:117) [rt.jar:1.6.0_41]
at java.lang.StringBuilder.append(StringBuilder.java:147) [rt.jar:1.6.0_41]
at java.lang.StringBuilder.append(StringBuilder.java:188) [rt.jar:1.6.0_41]
at org.jboss.logmanager.formatters.Formatters$JustifyingFormatStep.render(Formatters.java:250) [jboss-logmanager-1.5.8.Final-redhat-1.jar:1.5.8.Final-redhat-1]
at org.jboss.logmanager.formatters.MultistepFormatter.format(MultistepFormatter.java:83) [jboss-logmanager-1.5.8.Final-redhat-1.jar:1.5.8.Final-redhat-1]
at org.jboss.logmanager.ExtFormatter.format(ExtFormatter.java:32) [jboss-logmanager-1.5.8.Final-redhat-1.jar:1.5.8.Final-redhat-1]
at org.jboss.logmanager.handlers.WriterHandler.doPublish(WriterHandler.java:46) [jboss-logmanager-1.5.8.Final-redhat-1.jar:1.5.8.Final-redhat-1]
at org.jboss.logmanager.ExtHandler.publish(ExtHandler.java:76) [jboss-logmanager-1.5.8.Final-redhat-1.jar:1.5.8.Final-redhat-1]
at org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:302) [jboss-logmanager-1.5.8.Final-redhat-1.jar:1.5.8.Final-redhat-1]
at org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:310) [jboss-logmanager-1.5.8.Final-redhat-1.jar:1.5.8.Final-redhat-1]
at org.jboss.logmanager.Logger.logRaw(Logger.java:719) [jboss-logmanager-1.5.8.Final-redhat-1.jar:1.5.8.Final-redhat-1]
at org.jboss.logmanager.Logger.log(Logger.java:504) [jboss-logmanager-1.5.8.Final-redhat-1.jar:1.5.8.Final-redhat-1]
at org.jboss.stdio.AbstractLoggingWriter.write(AbstractLoggingWriter.java:71)
at org.jboss.stdio.WriterOutputStream.finish(WriterOutputStream.java:143)
at org.jboss.stdio.WriterOutputStream.write(WriterOutputStream.java:112)
at java.io.PrintStream.write(PrintStream.java:447) [rt.jar:1.6.0_41]
at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:220) [rt.jar:1.6.0_41]
at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:290) [rt.jar:1.6.0_41]
at sun.nio.cs.StreamEncoder.flushBuffer(StreamEncoder.java:103) [rt.jar:1.6.0_41]
at java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java:185) [rt.jar:1.6.0_41]
at java.io.PrintStream.write(PrintStream.java:494) [rt.jar:1.6.0_41]
at java.io.PrintStream.print(PrintStream.java:636) [rt.jar:1.6.0_41]
at java.io.PrintStream.println(PrintStream.java:773) [rt.jar:1.6.0_41]
at org.jboss.stdio.StdioContext$DelegatingPrintStream.println(StdioContext.java:474)
- The heap dump from the OutOfMemoryError showed that there were very large StringBuilders containing repeating messages. That StringBuilder was the stdout org.jboss.stdio.LoggingWriter's buffer.
Environment
- JBoss Enterprise Application Platform (EAP)
Subscriber exclusive content
A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.