【发布时间】:2016-09-02 06:12:05
【问题描述】:
我的产品有 256 MB 的 RAM。我已将 java 6 升级到 java 8。 然后我开始面临与 java 8 相关的内存问题。 Java 8 的内存消耗随着时间的推移而增加 使用相同的代码,内存消耗在 java 6 中是稳定的 我对元空间、java8 进行了很多探索,并在下面找到了元空间参数。
我尝试了以下组合并出现内存不足错误
1.MaxMetaspaceSize 50M MaxMetaspaceFreeRatio 60M MinMetaspaceFreeRatio 50M
2.MaxMetaspaceSize 30M
3.MaxMetaspaceSize 40M
4.MaxMetaspaceSize 50M
5.MaxMetaspaceSize 80M
但在 2 到 3 小时后,出现内存不足元空间错误。
谁能解释一下元空间选项 MaxMetaspaceSize,MaxMetaspaceFreeRatio ,MinMetaspaceFreeRatio 是什么?
如何确定合适的尺寸? 这些值的正确组合是什么,以避免生产中的内存不足实例并减少内存消耗?
【问题讨论】:
-
我不明白,为什么开发人员一直在搞这些选项。默认为无限元空间。因此,如果您不知道哪些限制是最好的,请不要指定任何限制。
-
如果我们不指定 limit ,最终可能会导致巨大的本机内存分配。
-
是的,如果你指定一个限制,它可以以
OutOfMemoryError结束。选择是你的…… -
如果我没有设置任何元空间属性,即使 GC 没有从元空间清理/卸载类,元空间也会继续增加。为什么会这样? GC运行时我应该怎么清理元空间?
-
你没有。如果软件存在内存泄漏,则没有 JVM 选项可以解决该问题。你必须修复软件。
标签: java-8 jetty-8 metaspace java-memory-leaks