У меня возникают проблемы с утечками памяти в JavaFX Scene Builder. Я подал отчет об ошибке, но тем временем моя система иногда становится невыносимо медленной, поскольку Scene Builder использует более 10 ГБ.

В качестве временного исправления я хочу ограничить объем памяти, который он может использовать. Я попытался установить следующее в SceneBuilder.cfg под JVMOptions:

-XX:InitialHeapSize=256m
-XX:MaxHeapSize=256m
-XX:MaxMetaspaceSize=256m

jps подтверждает, что аргументы передаются процессу:

3052  -Djava.library.path=/opt/SceneBuilder/app:/opt/SceneBuilder -Djava.launcher.path=/opt/SceneBuilder -Dapp.preferences.id=com/oracle/javafx/scenebuilder/app -XX:InitialHeapSize=256m -XX:MaxHeapSize=256m -XX:MaxMetaspaceSize=256m

Тем не менее, процесс все еще растет в использовании памяти, превышая 256 МБ, быстро превышая 6 ГБ и более.

Так есть ли способ действительно ограничить объем памяти, используемый процессом Java?

Изменить: я попытался с помощью ulimit:

ulimit -d 1024000 -v 1024000 -m 1024000

но тогда я получаю ошибку при попытке запуска:

Error occurred during initialization of VM
Could not allocate metaspace: 1073741824 bytes

что говорит о том, что Java действительно игнорирует параметр MetaspaceSize. Любой другой способ ограничить память в Java 8?

1 ответ1

0

Предполагая, что вы работаете в операционной системе Unix.

  1. Вы можете запускать программу от имени другого пользователя и применять ограничения, определенные в /etc/security/limits.conf для этой учетной записи. Это также позволит вам зарезервировать больше ресурсов для вашей обычной учетной записи пользователя.

  2. Вы можете попробовать привязать процесс к такому инструменту, как время ожидания.

Но поскольку ulimit не помогает, он, вероятно, в конечном итоге просто завершится сбоем процесса (если не может выделить память) или будет уничтожен системой.

Также проверьте https://unix.stackexchange.com/questions/44985/limit-memory-usage-for-a-single-linux-process, так как это аналогичный вопрос.

Редактировать: Что касается ограничения метапространства игнорируется. Ответ здесь https://stackoverflow.com/questions/31075761/java-8-reserved-minimum-1g-for-metaspace-despite-maxmetaspacesize

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .