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.