限制 Java 8 应用程序(SceneBuilder)的内存使用量

限制 Java 8 应用程序(SceneBuilder)的内存使用量

我在 JavaFX Scene Builder 中遇到了(似乎是)内存泄漏问题。我已经提交了错误报告,但与此同时,我的系统有时会变得难以忍受的缓慢,因为 Scene Builder 使用了 10+ GB。

作为临时解决方案,我想限制它可以使用的内存量。我尝试在 JVMOptions 下的 SceneBuilder.cfg 中设置以下内容:

-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

然而,该过程的内存使用量仍然不断上升,远远超过 256MB,很快就超过 6GB 以上。

那么有没有办法真正限制 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

假设您使用基于 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-reserves-minimum-1g-for-metaspace-despite-maxmetaspacesize

相关内容