Возможен ли полный отказ от off-heap памяти?

SawaPlayGO

Пользователь
Сообщения
14
Я не сильно разбираюсь в процессах запуска JVM машины, но вопрос касается возможности полного отказа от off-heap памяти и использовать память только внутри кучи (heap). Флаг: -XX:MaxDirectMemorySize=0 по своей сути должен попросту отказывать от прямой памяти, а следующие два флага, -Xms16384M -Xmx16384M, выделять внутрь машины 16 гб памяти которые будут использовать для работы сервера.

Запускатор:
java -XX:MaxDirectMemorySize=0 -Xms16384M -Xmx16384M -jar server.jar --nogui

Но при запуске выходит исключение:

sawaplaygo@sawaplaygo-server:~/server/event$ sh start.sh
Exception in thread "main" java.lang.OutOfMemoryError: Cannot reserve 16384 bytes of direct buffer memory (allocated: 0, limit: 0)
at java.base/java.nio.Bits.reserveMemory(Bits.java:178)
at java.base/java.nio.DirectByteBuffer.<init>(DirectByteBuffer.java:121)
at java.base/java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:330)
at java.base/sun.nio.ch.Util.getTemporaryDirectBuffer(Util.java:243)
at java.base/sun.nio.ch.IOUtil.read(IOUtil.java:242)
at java.base/sun.nio.ch.FileChannelImpl.read(FileChannelImpl.java:229)
at java.base/sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:65)
at java.base/sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:107)
at java.base/sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:101)
at io.papermc.paperclip.Paperclip.readFully(Paperclip.java:311)
at io.papermc.paperclip.Paperclip.readBytes(Paperclip.java:325)
at io.papermc.paperclip.Paperclip.isJarInvalid(Paperclip.java:336)
at io.papermc.paperclip.Paperclip.checkPaperJar(Paperclip.java:118)
at io.papermc.paperclip.Paperclip.setupEnv(Paperclip.java:95)
at io.papermc.paperclip.Paperclip.main(Paperclip.java:49)

Информирующая о том что попросту не может выделить мне такое количество памяти, это скорее связано с тем, что изначально установленный -XX:MaxDirectMemorySize=0 не разрешает брать прямую память себе под heap. Есть ли такие флаги которые бы просто говорили JVM - "тебе нельзя кушать прямую память, вот на еш heap". Читал что использование прямой памяти быстрее чем внутренней, но для меня не играет это особой роли потому что когда я выделяю на свой сервер памяти он просто "слишком много жрёт", после таких действий не остаётся свободной памяти для системы и падает сервак.


Вот ссылка на статью по моей проблеме:
 
Я не сильно разбираюсь в процессах запуска JVM машины, но вопрос касается возможности полного отказа от off-heap памяти
Нет.
1) Снеси все флаги в скрипте. У кого-то была проблема с тем, что из-за флагов и хреновой сборки vm не успевала избавляться от мусора
2) Если проблема повториться - перебирай сборку на утечки памяти увы сейчас у меня прямо сейчас другой заказчик, заказать перебор сборки от меня можно будет не раньше завтрашнего вечера
 
Назад
Сверху Снизу