You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@logging.apache.org by "Kostiantyn Shchepanovskyi (JIRA)" <ji...@apache.org> on 2019/06/25 08:12:00 UTC

[jira] [Comment Edited] (LOG4J2-1182) RandomAccessFile IOException: Stream Closed is back

    [ https://issues.apache.org/jira/browse/LOG4J2-1182?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16872143#comment-16872143 ] 

Kostiantyn Shchepanovskyi edited comment on LOG4J2-1182 at 6/25/19 8:11 AM:
----------------------------------------------------------------------------

 Managed to reproduce this issue with log4j 2.11.1, in our case it happens on *"Too many open files"* error when creating new file.

 

Steps to reproduce:
 # Configure RollingRandomAccessFile:

{code:java}
<RollingRandomAccessFile name="file" fileName="server.log"
                         filePattern="server-%d{yyyy-MM-dd'T'HH-mm-ss}.log.gz">
    <PatternLayout>       
        <pattern>%level{length=1} %date{MMdd-HHmm:ss,SSS} %logger{1.} %message %X %markerSimpleName [%thread]%n</pattern>
    </PatternLayout>
    <Policies>
        <OnStartupTriggeringPolicy/>
        <SizeBasedTriggeringPolicy size="1 MB"/>
    </Policies>
    <DefaultRolloverStrategy max="1000"/>
</RollingRandomAccessFile>{code}
 # Start application, make it log and roll files every couple of minutes.
 # Dramatically decrease number of file descriptors process can have, by running:

{code:java}
sudo prlimit -p <pid> --nofile=20{code}
 # Wait until rollover happens multiple times.
 Observation: new text files are created, but not gzipped.
 # Restore process limits:

{code:java}
sudo prlimit -p <pid> --nofile=4096{code}
 # Wait for rollover to happen.

After these steps, logs are not written to server.log anymore, instead, for each log event we receive exception to stdout:
{code:java}
Jun 22 11:55:45 dev-game-1 live-game-service: 2019-06-22 11:55:45,483 AsyncAppender-asyncFile ERROR Recovering from StringBuilderEncoder.encode('I 0622-1155:45,482 c.p.l.p.c.ConnectorImpl Channel /10.147.48.94:54622 write: Message{"service":"pt.live.internal.LobbySettingsService","action":"getLobbyTableSettingsResponse","type":"RESPONSE(2)","correlationId":306629,"dataFormat":"PR
OTOBUF(1)","data":"<ByteString@40245ccb size=12831>"} {dispatchId=/10.147.48.94:54622, requested_action=getLobbyTableSettingsRequest, requested_service=pt.live.internal.LobbySettingsService}
NIO [inio-2]
Jun 22 11:55:45 dev-game-1 live-game-service: ') error: org.apache.logging.log4j.core.appender.AppenderLoggingException: Error writing to RandomAccessFile /opt/local/live-game-service/log/server.log org.apache.logging.log4j.core.appender.AppenderLoggingException: Error writing to RandomAccessFile /opt/local/live-game-service/log/server.log
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.appender.rolling.RollingRandomAccessFileManager.writeToDestination(RollingRandomAccessFileManager.java:142)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.appender.OutputStreamManager.flushBuffer(OutputStreamManager.java:293)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.appender.OutputStreamManager.drain(OutputStreamManager.java:350)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.layout.ByteBufferDestinationHelper.writeToUnsynchronized(ByteBufferDestinationHelper.java:45)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.appender.OutputStreamManager.writeBytes(OutputStreamManager.java:360)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.layout.TextEncoderHelper.writeEncodedText(TextEncoderHelper.java:96)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.layout.TextEncoderHelper.encodeText(TextEncoderHelper.java:65)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.layout.StringBuilderEncoder.encode(StringBuilderEncoder.java:68)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.layout.StringBuilderEncoder.encode(StringBuilderEncoder.java:32)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.layout.PatternLayout.encode(PatternLayout.java:220)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.layout.PatternLayout.encode(PatternLayout.java:58)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.directEncodeEvent(AbstractOutputStreamAppender.java:177)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.tryAppend(AbstractOutputStreamAppender.java:170)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.append(AbstractOutputStreamAppender.java:161)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender.append(RollingRandomAccessFileAppender.java:250)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:156)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:129)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:120)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:84)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.appender.AsyncAppender$AsyncThread.callAppenders(AsyncAppender.java:458)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.appender.AsyncAppender$AsyncThread.run(AsyncAppender.java:411)
Jun 22 11:55:45 dev-game-1 live-game-service: Caused by: java.io.IOException: Stream Closed
Jun 22 11:55:45 dev-game-1 live-game-service: at java.base/java.io.RandomAccessFile.writeBytes(Native Method)
Jun 22 11:55:45 dev-game-1 live-game-service: at java.base/java.io.RandomAccessFile.write(RandomAccessFile.java:559)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.appender.rolling.RollingRandomAccessFileManager.writeToDestination(RollingRandomAccessFileManager.java:138)
Jun 22 11:55:45 dev-game-1 live-game-service: ... 20 more{code}


was (Author: kshchepanovskyi):
 

Managed to reproduce this issue with log4j 2.11.1, in our case it happens on *"Too many open files"* error when creating new file:
 # Configure RollingRandomAccessFile:

{code:java}
<RollingRandomAccessFile name="file" fileName="server.log"
                         filePattern="server-%d{yyyy-MM-dd'T'HH-mm-ss}.log.gz">
    <PatternLayout>       
        <pattern>%level{length=1} %date{MMdd-HHmm:ss,SSS} %logger{1.} %message %X %markerSimpleName [%thread]%n</pattern>
    </PatternLayout>
    <Policies>
        <OnStartupTriggeringPolicy/>
        <SizeBasedTriggeringPolicy size="1 MB"/>
    </Policies>
    <DefaultRolloverStrategy max="1000"/>
</RollingRandomAccessFile>{code}

 # Start application, make it log and roll files every couple of minutes.
 # Dramatically decrease number of file descriptors process can have, by running:

{code:java}
sudo prlimit -p <pid> --nofile=20{code}

 # Wait until rollover happens multiple times.
Observation: new text files are created, but not gzipped.
 # Restore process limits:

{code:java}
sudo prlimit -p <pid> --nofile=4096{code}

 # Wait for rollover to happen.

After these steps, logs are not written to server.log anymore, instead, for each log event we receive exception to stdout:
{code:java}
Jun 22 11:55:45 dev-game-1 live-game-service: 2019-06-22 11:55:45,483 AsyncAppender-asyncFile ERROR Recovering from StringBuilderEncoder.encode('I 0622-1155:45,482 c.p.l.p.c.ConnectorImpl Channel /10.147.48.94:54622 write: Message{"service":"pt.live.internal.LobbySettingsService","action":"getLobbyTableSettingsResponse","type":"RESPONSE(2)","correlationId":306629,"dataFormat":"PR
OTOBUF(1)","data":"<ByteString@40245ccb size=12831>"} {dispatchId=/10.147.48.94:54622, requested_action=getLobbyTableSettingsRequest, requested_service=pt.live.internal.LobbySettingsService}
NIO [inio-2]
Jun 22 11:55:45 dev-game-1 live-game-service: ') error: org.apache.logging.log4j.core.appender.AppenderLoggingException: Error writing to RandomAccessFile /opt/local/live-game-service/log/server.log org.apache.logging.log4j.core.appender.AppenderLoggingException: Error writing to RandomAccessFile /opt/local/live-game-service/log/server.log
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.appender.rolling.RollingRandomAccessFileManager.writeToDestination(RollingRandomAccessFileManager.java:142)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.appender.OutputStreamManager.flushBuffer(OutputStreamManager.java:293)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.appender.OutputStreamManager.drain(OutputStreamManager.java:350)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.layout.ByteBufferDestinationHelper.writeToUnsynchronized(ByteBufferDestinationHelper.java:45)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.appender.OutputStreamManager.writeBytes(OutputStreamManager.java:360)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.layout.TextEncoderHelper.writeEncodedText(TextEncoderHelper.java:96)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.layout.TextEncoderHelper.encodeText(TextEncoderHelper.java:65)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.layout.StringBuilderEncoder.encode(StringBuilderEncoder.java:68)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.layout.StringBuilderEncoder.encode(StringBuilderEncoder.java:32)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.layout.PatternLayout.encode(PatternLayout.java:220)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.layout.PatternLayout.encode(PatternLayout.java:58)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.directEncodeEvent(AbstractOutputStreamAppender.java:177)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.tryAppend(AbstractOutputStreamAppender.java:170)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.append(AbstractOutputStreamAppender.java:161)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender.append(RollingRandomAccessFileAppender.java:250)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:156)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:129)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:120)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:84)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.appender.AsyncAppender$AsyncThread.callAppenders(AsyncAppender.java:458)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.appender.AsyncAppender$AsyncThread.run(AsyncAppender.java:411)
Jun 22 11:55:45 dev-game-1 live-game-service: Caused by: java.io.IOException: Stream Closed
Jun 22 11:55:45 dev-game-1 live-game-service: at java.base/java.io.RandomAccessFile.writeBytes(Native Method)
Jun 22 11:55:45 dev-game-1 live-game-service: at java.base/java.io.RandomAccessFile.write(RandomAccessFile.java:559)
Jun 22 11:55:45 dev-game-1 live-game-service: at org.apache.logging.log4j.core.appender.rolling.RollingRandomAccessFileManager.writeToDestination(RollingRandomAccessFileManager.java:138)
Jun 22 11:55:45 dev-game-1 live-game-service: ... 20 more{code}

> RandomAccessFile IOException: Stream Closed is back
> ---------------------------------------------------
>
>                 Key: LOG4J2-1182
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-1182
>             Project: Log4j 2
>          Issue Type: Bug
>          Components: Appenders
>    Affects Versions: 2.4.1
>         Environment: Java 1.8.0_60-b27, OSX 10.11, Jackson 2.6.1, Maven 3.3.3
>            Reporter: Ravi Gairola
>            Priority: Minor
>              Labels: Rollover
>
> This error pops up every now and then and looks very similar to LOG4J2-636:
> {code:java}
> 2015-10-27-23:00:00 2015-10-27 16:00:00,038 scribe-EventScribe ERROR Unable to write to stream logs/server.log for appender AppLog
> 2015-10-27-23:00:00 2015-10-27 16:00:00,038 scribe-EventScribe ERROR An exception occurred processing Appender AppLog org.apache.logging.log4j.core.appender.AppenderLoggingException: Error writing to RandomAccessFile logs/server.log
> 2015-10-27-23:00:00 	at org.apache.logging.log4j.core.appender.rolling.RollingRandomAccessFileManager.flush(RollingRandomAccessFileManager.java:132)
> 2015-10-27-23:00:00 	at org.apache.logging.log4j.core.appender.rolling.RollingRandomAccessFileManager.write(RollingRandomAccessFileManager.java:112)
> 2015-10-27-23:00:00 	at org.apache.logging.log4j.core.appender.OutputStreamManager.write(OutputStreamManager.java:136)
> 2015-10-27-23:00:00 	at org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.append(AbstractOutputStreamAppender.java:105)
> 2015-10-27-23:00:00 	at org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender.append(RollingRandomAccessFileAppender.java:98)
> 2015-10-27-23:00:00 	at org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:152)
> 2015-10-27-23:00:00 	at org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:125)
> 2015-10-27-23:00:00 	at org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:116)
> 2015-10-27-23:00:00 	at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:84)
> 2015-10-27-23:00:00 	at org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:390)
> 2015-10-27-23:00:00 	at org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:378)
> 2015-10-27-23:00:00 	at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:362)
> 2015-10-27-23:00:00 	at org.apache.logging.log4j.core.config.LoggerConfig.logParent(LoggerConfig.java:384)
> 2015-10-27-23:00:00 	at org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:379)
> 2015-10-27-23:00:00 	at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:362)
> 2015-10-27-23:00:00 	at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:352)
> 2015-10-27-23:00:00 	at org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(AwaitCompletionReliabilityStrategy.java:63)
> 2015-10-27-23:00:00 	at org.apache.logging.log4j.core.Logger.logMessage(Logger.java:143)
> 2015-10-27-23:00:00 	at org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:1011)
> 2015-10-27-23:00:00 	at org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:988)
> 2015-10-27-23:00:00 	at org.apache.logging.slf4j.Log4jLogger.error(Log4jLogger.java:318)
> 2015-10-27-23:00:00 	at com.nextbit.syncserver.common.EventScribe$Scribe.run(EventScribe.java:142)
> 2015-10-27-23:00:00 Caused by: java.io.IOException: Stream Closed
> 2015-10-27-23:00:00 	at java.io.RandomAccessFile.writeBytes(Native Method)
> 2015-10-27-23:00:00 	at java.io.RandomAccessFile.write(RandomAccessFile.java:525)
> 2015-10-27-23:00:00 	at org.apache.logging.log4j.core.appender.rolling.RollingRandomAccessFileManager.flush(RollingRandomAccessFileManager.java:129)
> 2015-10-27-23:00:00 	... 21 more
> {code}
> Here's the respective yaml configuration:
> {code}
> configuration:
>   monitorInterval: 60
>   status: WARN
>   name: Production Configuration
>   packages: com.our.packages
>   appenders:
>     appender:
>       -
>         type: Console
>         name: CONSOLE
>         PatternLayout: { pattern: '%d{yyyy-MMM-dd-HH:mm:ss.SSS} [%p|%c{1}|%t|%X{rid}] %h: %m %n' }
>       -
>         type: RollingRandomAccessFile
>         name: AppLog
>         fileName: logs/server.log
>         filePattern: 'logs/server.log.%d{yyyy-MM-dd-HH}.gz'
>         append: true
>         PatternLayout: { pattern: '%d{yyyy-MMM-dd-HH:mm:ss.SSS} [%p|%c{1}|%t|%X{rid}] %h: %m %n' }
>         TimeBasedTriggeringPolicy: { modulate: true }
>         DefaultRolloverStrategy: { max: 240 }
>   loggers:
>       - { name: com.amazonaws, level: warn }
>       - { name: org.hibernate, level: warn }
>     root:
>       level: info
>       AppenderRef: { ref: AppLog }
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)