[ https://issues.apache.org/jira/browse/ARTEMIS-1811?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Francesco Nigro updated ARTEMIS-1811: ------------------------------------- Summary: NIOSequentialFile should use RandomAccessFile with heap ByteBuffers (was: JournalStorageManager::addBytesToLargeMessage should not use heap buffers) > NIOSequentialFile should use RandomAccessFile with heap ByteBuffers > ------------------------------------------------------------------- > > Key: ARTEMIS-1811 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1811 > Project: ActiveMQ Artemis > Issue Type: Improvement > Components: Broker > Affects Versions: 2.5.0 > Reporter: Francesco Nigro > Assignee: Francesco Nigro > Priority: Major > > JournalStorageManager::addBytesToLargeMessage is relying on the pooling of > direct ByteBuffers performed internally by NIO. > Those buffers are pooled until certain size limit (ie > jdk.nio.maxCachedBufferSize, as shown on > [https://bugs.openjdk.java.net/browse/JDK-8147468]) and when not pooled are > cleaned at the end of its usage. > That's stress the native memory allocator and would lead to poor performances > and potential OOMs as well, dependently on the written message chunk size. > The proposed solutions are: > # perform ad hoc direct ByteBuffer caching on the write path thanks to the > read lock > # replace the NIO SequentialFile usage and just use RandomAccessFile that > provide the right API to append byte[] without creating additional native > copies -- This message was sent by Atlassian JIRA (v7.6.3#76005)