mp911de/logstash-gelf

java.lang.OutOfMemoryError: Direct buffer memory

xyx666666 opened this issue · 4 comments

at java.nio.Bits.reserveMemory(Bits.java:694)
at java.nio.DirectByteBuffer.(DirectByteBuffer.java:123)
at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:311)
at biz.paluch.logging.gelf.intern.sender.GelfUDPSender$1.initialValue(GelfUDPSender.java:25)
at biz.paluch.logging.gelf.intern.sender.GelfUDPSender$1.initialValue(GelfUDPSender.java:22)
at java.lang.ThreadLocal.setInitialValue(ThreadLocal.java:180)
at java.lang.ThreadLocal.get(ThreadLocal.java:170)
at biz.paluch.logging.gelf.intern.sender.GelfBuffers.getBuffer(GelfBuffers.java:69)
at biz.paluch.logging.gelf.intern.sender.GelfBuffers.toUDPBuffers(GelfBuffers.java:35)
at biz.paluch.logging.gelf.intern.sender.GelfUDPSender.sendMessage(GelfUDPSender.java:47)
at biz.paluch.logging.gelf.logback.GelfLogbackAppender.append(GelfLogbackAppender.java:94)
at biz.paluch.logging.gelf.logback.GelfLogbackAppender.append(GelfLogbackAppender.java:67)
at ch.qos.logback.core.AppenderBase.doAppend(AppenderBase.java:82)
at ch.qos.logback.core.spi.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:51)
at ch.qos.logback.classic.Logger.appendLoopOnAppenders(Logger.java:270)
at ch.qos.logback.classic.Logger.callAppenders(Logger.java:257)
at ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:421)
at ch.qos.logback.classic.Logger.filterAndLog_2(Logger.java:414)
at ch.qos.logback.classic.Logger.info(Logger.java:587)

jvm 2G

1、 return (ByteBuffer) buffers.get().clear();
(2)the "get()" function make the "writeBuffers" do "initialValue",to get a new DirectByteBuffer

private final ThreadLocal<ByteBuffer> writeBuffers = new ThreadLocal<ByteBuffer>() {
    @Override
    protected ByteBuffer initialValue() {
        return ByteBuffer.allocateDirect(INITIAL_BUFFER_SIZE);
    }
};

2、I want to know. Will ‘DirectByteBuffer’ be released clean

I have solve it.It is because I create too many threads.

Thanks for the update, closing this ticket here.